2010-02-03 6 views
1

Lors de la création d'un Gridview au moment de la conception, vous pouvez créer une colonne de modèle comme celui-ci:Modèle Dynamic GridView et identifiants de contrôle uniques (par exemple, zone de texte, étiquette)?

<asp:TemplateField> 
    <ItemTemplate> 
      <asp:Label runat="server" ID="Label1"></asp:Label> 
    </ItemTemplate> 
</asp:TemplateField> 

Et dans le HTML, il donnera un nom unique comme:

<span id="gvSelect_ctl02_Label1">blahblah</span> 

Et je peux alors faire référence cette étiquette dans le code derrière par:

CType(e.Row.FindControl("Label1"), Label) 

Qui est PARFAIT. Mais je ne peux pas comprendre comment faire ceci quand je crée dynamiquement TemplateFields. J'ai le code suivant dans mon « InstantiateIn »:

Dim hl As New HiddenField 
hl.ID = "hHidden" 
hl.Value = 0 
AddHandler hl.DataBinding, AddressOf Me.hl_DataBinding 
container.Controls.Add(hl) 

Et cela ne crée un contrôle caché avec l'ID comme hHidden dans chaque ligne. Mais ça ne lui donne pas l'identifiant unique comme "gvSelect_ctl02_hHidden" c'est juste "hHidden". Et je sais qu'il y a des façons d'ajouter moi-même le numéro de ligne. Mais je me demandais s'il y avait un moyen de le faire automatiquement. Et toujours en me permettant de référencer le champ caché comme:

CType(e.Row.FindControl("hHidden"), HiddenField) 
+0

Qu'est-ce que "container" dans votre exemple? –

+0

umm .. Conteneur ByVal En tant que System.Web.UI.Control? Qui est un "TemplateField" .. – Dan

Répondre

0

Ugh .. une autre réponse à ma propre question. Je cherchais le nom dans le RowCreated. J'aurais dû le chercher dans l'événement RowDataBound.

cela fonctionne maintenant .. maintenant que je le fais correctement.

(Je peux avoir trop de choses sur la route à la fois ..): S

Questions connexes