Bonjour à tous.

Je me relance dans la création d'un Template de GridView pour afficher mes infos avec une mise en forme particulière.
Mon idée est d'envoyer une seule colonne dans mon GridView qui sera une colonne composite formée d'une Table avec tout dedans.

J'ai déjà fait un Template, mais il y a longtems et c'était déjà un truc super spécifique, alors je reprends mon vieux code qui marche bien, mais je voudrais l'alléger et aller à l'essentiel sur mon cas présent et surtout moins spécifique.

Donc pour aller à l'essentiel je cherche d'abords à envoyer un truc tout simple mais ça marche pas. Je dois oublier un truc important sauf que je capte pas où se trouve mon oubli.

Alors je vous soumets mon code dans l'espoir que vous voyez là où je plante.
J'ai placé le GridView tout nu dans la partie HTML
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<asp:GridView ID="gvGig" runat="server"></asp:GridView>
Ensuite, dans le Init de la page j'ai mis ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
With gvGig
            .DataSource = dtGig
            .AutoGenerateColumns = False
            .DataBind()
        End With
        Dim tpGig As New TemplateField
        With tpGig
            .ItemTemplate = New TplGig(DataControlRowType.DataRow)
            .HeaderTemplate = New TplGig(DataControlRowType.Header)
        End With
Et j'ai fais une autre classe comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
Public Class TplGig
    Implements ITemplate
 
    Private templateType As DataControlRowType
 
    Sub New(ByVal type As DataControlRowType)
        templateType = type
    End Sub
    Public Sub InstantiateIn(ByVal container As System.Web.UI.Control) Implements System.Web.UI.ITemplate.InstantiateIn
        Select Case templateType
            Case DataControlRowType.Header
            Case DataControlRowType.DataRow
                Dim l As New Label
                Dim row As GridViewRow = CType(l.NamingContainer, GridViewRow)
                l.Text = DataBinder.Eval(row.DataItem, "Titre")
                container.Controls.Add(l)
            Case Else
 
        End Select
    End Sub
End Class
Là il me plante avec un message lapidaire :
La référence d'objet n'est pas définie à une instance d'un objet.
sur la ligne
l.Text = DataBinder.Eval(row.DataItem, "Titre")
Pourtant, sauf si je me gourre, je lui envoi le nom de la colonne dans la Datatable source et visiblement il la trouve pas.
Alors la question est : pourquoi ?

Si je mets un chaine toute simple dans le Label, aucun soucis, il m'affiche autant de Label avec la chaine que j'ai d'enregistrement dans ma DataTable.

Pouvez vous m'aider ?