在gridview的编辑模式下拉列表

时间:2015-07-14 08:36:07

标签: c# asp.net gridview

在我的c#应用程序中,当我在gridview中编辑一行时,我从下拉列表中选择了一些新数据。

我正在填写下拉列表:

<asp:TemplateField HeaderText="Gender">
    <ItemTemplate>
        <asp:Label ID="gender" runat="server" Text='<%# Eval("gender").ToString() %>'></asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
        <asp:DropDownList ID="DDL_genderList" runat="server">
            <asp:ListItem Value="" Text="---"></asp:ListItem>
            <asp:ListItem Value="M" Text="M"> </asp:ListItem>
            <asp:ListItem Value="F" Text="F"> </asp:ListItem>
        </asp:DropDownList>
    </EditItemTemplate>
</asp:TemplateField>

但是,当我按下模板中的“编辑”按钮并输入“RowUpdating”事件时,下拉列表中的选定值就是每次下拉列表中的第一个值。

我需要在下拉列表中选择值,它是标签性别中显示的值。

有没有人有任何想法?

我已尝试过多种方法在'RowDataBound'事件中设置所选值,但没有运气。

我试过了:

protected void gvProducts_RowDataBound(object sender, GridViewRowEventArgs e)
{
    DataRowView dRowView = (DataRowView)e.Row.DataItem;

    if ((e.Row.RowState & DataControlRowState.Edit) > 0)
    {
        DropDownList genderList = (DropDownList)e.Row.FindControl("DDL_genderList");
        genderList.SelectedValue = dRowView[1].ToString();
    }
}

1 个答案:

答案 0 :(得分:0)

您必须从EditTemplate(EditRowState)中找到TemplateField(DataRow)和DropDownList中的Label,如下所示:

protected void gvProducts_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // find gender from label which is inside ItemTemplate
        string lblgender = ((Label)e.Row.FindControl("gender")).Text;

        if ((e.Row.RowState & DataControlRowState.Edit) > 0)
        {
            // find gender list from dropdownlist which is inside EditTemplate
            DropDownList genderList = (DropDownList)e.Row.FindControl("DDL_genderList");
            genderList.SelectedIndex = 
                genderList.Items.IndexOf(genderList.Items.FindByValue(lblgender));
        }
    }
}

我知道这是非常晚的答案,但它可以帮助OP。