2010-02-10 6 views
0

J'ai un certain nombre de listes déroulantes intégrées dans un gridview. Quand je soumets la boucle de page I à toutes les lignes de la gridview et utiliser la méthode FindControl pour obtenir le dropdownlist par exemple:DropDownList Élément sélectionné incorrect lors de l'utilisation de FindControl

foreach (GridViewRow gvrItem in gvItems.Rows) 
{  
    DropDownList ddlOption = gvrItem.Cells[2].FindControl("ddlOption") as DropDownList; 
} 

Cela fonctionne bien, mais lorsque je tente d'obtenir l'élément sélectionné de l'ex DropDownList:

ddlOption .SelectedItem.Text 

Il retourne toujours le premier élément de la liste plutôt que ce qui est réellement sélectionné dans la page. Des idées de ce que je fais mal?

Répondre

0

Il est avéré être une bizarrerie de .Net, si vous remplissez la liste déroulante avec des années ListItem il ne porterai pas ces éléments dans le ViewState. Si vous remplissez la liste déroulante avec des chaînes il le fera. Très étrange je sais.

.: par exemple

DropDownList ddl = new DropDownList(); 
ddl.Add(new ListItem("text", "value")); <----Fails :(
ddl.Add("text"); <---- Works :) 
1

Vous devez faire cela après que GridView a été databound. Essayez d'appeler en cas DataBound:

protected void GridView1_DataBound(object sender, EventArgs e) 
{ 
    foreach (GridViewRow gvrItem in gvItems.Rows) 
    {  
     DropDownList ddlOption = gvrItem.Cells[2].FindControl("ddlOption") as DropDownList; 
    } 
    string selectedItem = ddlOption.SelectedItem.Text; 
} 
+0

oo fait après une publication - il devrait y avoir aucun besoin de lier de nouveau le GRIDVIEW, tant que 'EnableViewState' est réglé sur'on'. –

+0

Il ne dit pas qu'il est nécessaire de relier le gridview. Il est en train de dire que le moment où l'on accède à la liste déroulante n'est peut-être pas le meilleur. Après que le gridview a été databound peut être un meilleur moment pour essayer d'accéder à la valeur sélectionnée. – AGoodDisplayName

+0

Je le fais déjà, on clique sur un bouton et la méthode page_init s'exécute d'abord (Cette base de données affiche la grille et ajoute dynamiquement la liste déroulante à la grille). Ensuite, la méthode des boutons parcourt à quel point le code ci-dessus s'exécute. La chose folle est que j'ai déjà quelque chose de similaire sur une page séparée. Je me bats pour voir le différent dans les deux –

Questions connexes