2009-04-21 5 views
1

J'ai du code ASP.NET qui génère dynamiquement des lignes et des cellules pour un contrôle Table sur la page.Utilisation de FindControl sur les contrôles générés dynamiquement

J'ai spécifiquement défini l'ID de chaque cellule, mais j'ai du mal à trouver FindControl pour les trouver.

Voici le code que j'utilise pour créer les cellules:

tbc = New TableCell 
tbr.Cells.Add(tbc) 
tbc.ID = String.Format("tc_{0}-{1}-{2}", curStartDate.Day, curStartDate.Month, curStartDate.Year) 

Juste en dessous, j'essaie de trouver le contrôle avec les éléments suivants:

Dim ctlName As String = String.Format("tc_{0}-{1}-{2}", curStartDate.Day, curStartDate.Month, curStartDate.Year) 
Dim ctl As Control = tblAllocations.FindControl(ctlName) 

J'ai essayé permutant la ligne déclare l'ID, avec la ligne qui ajoute la cellule à la collection Cells du TableRow, et cela le fait fonctionner. Mais tout au long de mon application, j'ai les déclarations dans l'ordre comme ci-dessus, et ils fonctionnent bien (FindControl peut trouver le contrôle avec l'ID correct).

Y at-il quelque chose d'évident qui me manque?

Répondre

1

Lorsque vous dites "juste en dessous" avez-vous ajouté le tbr au tblAllocations.Rows encore? Si ce n'est pas ce serait la raison pour laquelle il ne peut être trouvé.

+0

Oui, il a été définitivement ajouté. Je peux voir la ligne et les cellules dans la sortie de la page. Les cellules ont également leur ID sortie vers le HTML. –

+0

Je voulais dire qu'au moment où vous appelez FindControl, la ligne a-t-elle été ajoutée à la table? tblAllocations.Rows.Add (tbr) doit être passé avant tblAllocations.FindControl va trouver une cellule dans ce tbr – AnthonyWJones

+0

Il a été définitivement ajouté correctement. Je pense que j'ai cependant réduit le problème. J'ai DropDownList sur lequel j'appelle la méthode DataBind avant de créer les contrôles. Lorsque je supprime cet appel à DataBind, tout fonctionne correctement. C'est vraiment bizarre. –

Questions connexes