Gridview EditItemTemplate DropDownList Obtenir SelectedValue

Dans mon Gridview j'ai le modèle suivant champ:

<asp:TemplateField HeaderText="Dept Code" SortExpression="DeptCode">
    <ItemTemplate>
        <%# Eval("DeptCode") %>
    </ItemTemplate>
    <EditItemTemplate>
        <asp:DropDownList ID="ddlDeptCode" runat="server" 
            SelectedValue='<%# Eval("DeptCode") %>' 
            DataSource='<%# GetAllDepartments() %>' 
            DataTextField="DeptCode" 
            DataValueField="DeptCode" />
    </EditItemTemplate>
</asp:TemplateField> 

Cela fonctionne très bien lorsque je clique sur Modifier sur une ligne, elle remplit la DropDownList avec toutes les valeurs et sélectionne la valeur correcte pour cette ligne.

Cependant, lorsque j'essaie de mettre à jour la ligne: OnRowUpdating="UpdateRow"

protected void UpdateRow(object sender, GridViewUpdateEventArgs e)
{
    GridViewRow row = UserGV.Rows[e.RowIndex];
    DropDownList ddl = row.FindControl("ddlDeptCode") as DropDownList;
    string deptCode = ddl.SelectedValue;
}

Il trouve le contrôle DropDownList mais la SelectedValue est toujours une chaîne vide.
J'ai besoin d'accéder à la valeur sélectionnée pour enregistrer dans la base de données.

Aucune idée de comment je peux obtenir le SelectedValue d'un DropDownList dans un Gridview dans le code derrière?

Edit:
Vous pouvez également remplir la DropDownList et SelectedValue depuis le code-behind:

protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
     if (e.Row.RowType == DataControlRowType.DataRow)
     {
        if ((e.Row.RowState & DataControlRowState.Edit) > 0)
        {
           var deptMgr = new DepartmentMgr();
           List<Department> departments = deptMgr.GetAllDepartments();
           DropDownList ddList = (DropDownList)e.Row.FindControl("ddlDeptCode");
           ddList.DataSource = departments;
           ddList.DataTextField = "DeptCode";
           ddList.DataValueField = "DeptCode";
           ddList.DataBind();

           string userDeptCode = DataBinder.Eval(e.Row.DataItem, "DeptCode").ToString();
           ddList.SelectedItem.Text = userDeptCode;
           ddList.SelectedValue = userDeptCode;
       }
    }
}
êtes-vous en remplissant le dropdownlist de la même gridview tableau ou d'une autre table?
Je vois, parce que j'ai créé une base de données simple avec xml et créé deux tables essayé exactement ton code et il fonctionne très bien et l'affichage des valeurs correctement, donc je ne sais pas quel est le problème, mais je vais télécharger le projet simple, j'ai fait peut-être que vous pourriez le comprendre alors.
J'ai encore des doutes que votre problème sera dans la base de données de valeurs qui ne sont pas à la conception et à l'accès de dropdownlist, de toute façon, s'il vous plaît télécharger l'échantillon à partir d'ici: docs.google.com/file/d/0B5Xsv2VzgUv0aHlmaXVrRmVydUE/edit j'espère que cela vous aidera.
ok, alors en attente pour la mise à jour.
ouais, c'est vraiment bizarre mais bon, que vous connaissez le problème maintenant, comme pour la voie alternative de l'ajout d'un deuxième en-tête, je suis déjà à l'aide de cette méthode ici codeproject.com/Articles/249155/... ,il suffit de copier le RowCreated & AddMergedCell méthode et de les modifier pour la suite de vos besoins. Je dois y aller maintenant, mais j'espère que vous pourriez résoudre ce problème, le garder jusqu'à la contrainte.

OriginalL'auteur Baxter | 2014-04-08