2009-10-14 4 views
1

J'ai peu de texboxt et liste déroulante, dont leur id serait quelque chose comme "txtName1, txtName2, txtName3 ..." et "ddlAction1, ddlAction2, ddlAction3 ...."! Plût à de définir dynamiquement l'textboxt et id dropdownlist en quelque chose comme ceci:ID de contrôle défini dynamiquement

for i as integer = 0 to 6 
    a = txtName+i.text 
    b = ddlAction+i.SelectedValue 
next i 

Besoin d'aide de vous les gars pour le faire! merci ....

Répondre

3

La clé est FindControl, qui recherche un contrôle par son attendu ID:

For i As Integer = 0 To 5 
    Dim txt As TextBox = TryCast(Me.Page.FindControl("txtName" & i.ToString()), TextBox) 
    Dim ddl As DropDownList = TryCast(Me.Page.FindControl("ddlAction" & i.ToString()), DropDownList) 

    If txt IsNot Nothing AndAlso ddl IsNot Nothing Then 
     Dim a As String = txt.Text 
     Dim b As String = ddl.SelectedValue 
    End If 
Next 

Il renvoie null/rien si un contrôle avec cet ID est introuvable.

Notez que FindControl ne recherchera que le contrôle (ou la page) immediate children du contrôle donné, et non l'intégralité de l'arborescence de contrôle. Pour effectuer une recherche récursive, vous devez utiliser votre propre méthode FindControl.

Private Function FindControlRecursive(ByVal control As Control, ByVal id As String) As Control 
    Dim returnControl As Control = control.FindControl(id) 
    If returnControl Is Nothing Then 
     For Each child As Control In control.Controls 
      returnControl = child.FindControlRecursive(id) 
      If returnControl IsNot Nothing AndAlso returnControl.ID = id Then 
       Return returnControl 
      End If 
     Next 
    End If 
    Return returnControl 
End Function 
+0

c'est ce que je veux .... merci beaucoup !! –

+0

A -1 réponse acceptée lol. Les gens ne sont pas très généreux ce soir. – Polaris878

0

Je ne suis pas un expert en forme de Web, mais je crois que la page stocke une référence à chaque contrôle présent dans la page.

Vous pouvez penser à des formes web comme un arbre n-aire ... chaque contrôle a un parent et peut avoir de 0 à plusieurs enfants. Donc, si ce sont des contrôles statiques, vous devriez juste être en mesure d'obtenir une référence à leur parent et itérer dessus ... sans avoir besoin des identifiants des enfants.

De plus, vous pouvez rechercher des enfants en fonction de leur id ... quelque chose comme myControl["myID1"] afin que vous puissiez concaténer le nombre avec la chaîne et obtenir le contrôle de cette façon. Enfin, s'il s'agit de contrôles purement dynamiques, c'est-à-dire que vous ne connaissez pas leur nombre, il suffit de stocker des références dans une collection ordonnée et de les parcourir de cette manière.

EDIT:

Ici, nous aller:

WebControl myControl; 
myControl.Controls.Add(someControlReference); 

Ensuite, pour prendre un contrôle par ID:

WebControl someControl = myControl.FindControl("someControlID1"); 

De là, vous pouvez faire comme:

string a = someControl.Text 
+0

pourquoi le vote en baisse? soin d'expliquer? – Polaris878

3

.Net vous oblige à résoudre vos noms de variables au moment de la compilation, plutôt que l'exécution comme le code essaie de le faire. C'est une bonne chose, car elle vous empêche de faire certains types d'erreurs. Mais cela signifie que vous devrez envisager une approche alternative pour ce problème particulier.

Une option est une méthode basée sur FindControl. Mais les chances sont les contrôles qui vous intéressent sont regroupés sur la page. Si ce n'est pas déjà fait, placez-les dans un contrôle de conteneur commun, comme un panneau. Ensuite, vous pouvez faire quelque chose comme ça (nécessite System.Linq):

For Each t As TextBox In MyContainer.Controls.OfType(Of TextBox)() 
    a = t.Text 
Next t 

For Each d As DropDownList In MyContainer.Controls.OfType(Of DropDownList)() 
    b = d.SelectedValue 
Next d 

Aussi, j'espère que vous faites vraiment autre chose que l'affectation à l'intérieur de votre boucle. Sinon, la plupart du travail est pour rien car vous quitterez la boucle en ayant simplement assigné la valeur de la dernière itération à votre variable.Enfin, il semble que ces contrôles pourraient fonctionner par paires. Pour moi, c'est une situation qui vous demande de mettre en place un contrôle utilisateur.

Questions connexes