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
<asp:GridView ID="gvGig" runat="server"></asp:GridView>
Ensuite, dans le Init de la page j'ai mis ça :
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 :
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 ?
Partager