将下拉列表绑定到gridview中的editItemTemplate和footerTemplate

4 asp.net gridview datagridview

我有一个网格,我尝试将下拉列表绑定到FooterTemplate和EdiItemTemplate.

<asp:TemplateField HeaderText="Role" SortExpression="Role">
                                    <HeaderStyle Width="100px"   HorizontalAlign="Center" Wrap="False"></HeaderStyle>
                                    <EditItemTemplate>
                                        <asp:DropDownList ID="ddlRole" runat="server">
                                        </asp:DropDownList>
                                    </EditItemTemplate>
                                    <FooterTemplate>
                                        <asp:DropDownList ID="ddlFRRole" runat="server">
                                        </asp:DropDownList>
                                    </FooterTemplate>
                                    <ItemTemplate>
                                        <asp:Label ID="lblRole" runat="server" Text='<%# Bind("[Role_Cd]") %>'></asp:Label>
                                    </ItemTemplate>
                                </asp:TemplateField>
Run Code Online (Sandbox Code Playgroud)

我使用此代码,没有运气.我无法将值绑定到下拉列表.如果我错了,任何人都可以纠正我吗?

protected void UPGrid_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DropDownList ddlRole = (DropDownList)e.Row.FindControl("ddlRole");
            DropDownList ddlFRRole = (DropDownList)e.Row.FindControl("ddlFRRole");
            ddlRole.DataSource = UPRepository.GetRoles();                
            ddlRole.DataTextField = "Role_Cd";
            ddlRole.DataValueField = "Role_Cd";
            ddlRole.DataBind();
            ddlFRRole.DataSource = UPRepository.GetRoles();                
            ddlFRRole.DataTextField = "Role_Cd";
            ddlFRRole.DataValueField = "Role_Cd";
            ddlFRRole.DataBind();

        }
    }
Run Code Online (Sandbox Code Playgroud)

R.C*_*R.C 5

您应首先检查并RowIndexEditIndex要编辑的GridView 进行比较,然后将整个代码绑定到下拉列表中.

此外,要在页脚中查找下拉列表,您需要使用条件:

if (e.Row.RowType == DataControlRowType.Footer)
Run Code Online (Sandbox Code Playgroud)

并且,用于连续查找下拉列表使用

if (e.Row.RowType == DataControlRowType.DataRow)
Run Code Online (Sandbox Code Playgroud)

在你的RowDataBound事件中绑定你的下拉列表GridView.现在你的代码应该是::

protected void MyGridView_RowDataBound( object sender, GridViewRowEventArgs e)
    {
        if(MyGridView.EditIndex == e.Row.RowIndex ) //GET THE ROW TO BE EDITED
         {
            if (e.Row.RowType == DataControlRowType.DataRow)
              {
               DropDownList ddlRole = (DropDownList)e.Row.FindControl("ddlRole");
                // Rest of Code
              }
        if (e.Row.RowType == DataControlRowType.Footer)
         {
           DropDownList ddlFRRole = (DropDownList)e.Row.FindControl("ddlFRRole");
           // Rest of code
         }
    }
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用以下条件来检查正在编辑的行::

if ((e.Row.RowState & DataControlRowState.Edit) > 0)
Run Code Online (Sandbox Code Playgroud)

或等效:: if (e.Row.RowState == DataControlRowState.Edit)