2009-03-07 9 views
1

Je peux lier la liste déroulante dans le modèle d'élément d'édition. La liste déroulante a des valeurs nulles.Liste déroulante de liaison dans un modèle d'élément d'édition gridview

protected void grdDevelopment_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    DropDownList drpBuildServers = new DropDownList(); 

    if (grdDevelopment.EditIndex == e.Row.RowIndex)  
    {   
     drpBuildServers = (DropDownList)e.Row.Cells[0].FindControl("ddlBuildServers");  
    } 
} 

aussi obtenir une erreur

Impossible de charger viewstate. L'arborescence de contrôle dans laquelle viewstate est en cours de chargement doit correspondre à l'arborescence de contrôle utilisée pour enregistrer viewstate lors de la requête précédente. Par exemple, lors de l'ajout dynamique de contrôles, les contrôles ajoutés lors d'un post-retour doivent correspondre au type et à la position des contrôles ajoutés lors de la demande initiale.

+0

L'exception que vous obtenez n'est pas liée au code que vous publiez. Votre exception concerne un contrôle que vous ajoutez ou supprimez entre les publications de page. – Canavar

Répondre

1

J'ai eu des problèmes de contrôle de trouver, à la fin j'ai utilisé un peu de récursion pour trouver le contrôle:

private Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id) 
    { 
     return root; 
    } 

    foreach (Control c in root.Controls) 
    { 
     Control t = FindControlRecursive(c, id); 
     if (t != null) 
     { 
      return t; 
     } 
    } 

    return null; 
} 

Alors pour trouver votre commande font de cet appel:

drpBuildServers = (DropDownList) FindControlRecursive(e.Row.Cells[0], "ddlBuildServers"); 
+0

J'ai essayé cela mais pas encore résolu.et aussi quand je clique sur le bouton d'édition son lancer une erreur Impossible de charger viewstate. L'arborescence de contrôle dans laquelle viewstate est en cours de chargement doit correspondre à l'arborescence de contrôle utilisée pour enregistrer viewstate lors de la requête précédente. –

+0

Ok, pouvez-vous fournir un exemple court et complet qui illustre le problème? Si vous mettez le codefile quelque part, je pourrais vous aider. – ilivewithian

1
protected void grdDevelopment_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     DropDownList drpBuildServers; 

     drpBuildServers = e.Row.FindControl("ddlBuildServers") as DropDownList; 

     if (drpBuildServers != null) 
      // Write your code here    
    } 
} 
0

Son une solution pour moi:

protected void grdDevelopment_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     DropDownList drpBuildServers; 

     drpBuildServers = e.Row.FindControl("ddlBuildServers") as DropDownList; 

     if (drpBuildServers != null) 
      // Write your code here    
    } 
} 
Questions connexes