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

4

我有一个网格,我尝试将下拉列表绑定到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>

我正在使用这段代码,但没有成功。我无法将值绑定到下拉框中。如果我错了,请有人纠正一下?

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();

        }
    }
1个回答

5

您应该首先检查并将RowIndex与要编辑的GridView的EditIndex进行比较,并将整个代码绑定到下拉列表中。

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

if (e.Row.RowType == DataControlRowType.Footer)

同时,在一行中查找下拉列表,请使用

if (e.Row.RowType == DataControlRowType.DataRow)

GridViewRowDataBound 事件中绑定下拉列表。 现在你的代码应该是:
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
         }
    }

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

::

if ((e.Row.RowState & DataControlRowState.Edit) > 0)

或者等价于:if (e.Row.RowState == DataControlRowState.Edit)

在IT技术方面,这段代码用于检查数据控件行的状态是否为编辑状态。

尝试使用以下条件: " if ((e.Row.RowState & DataControlRowState.Edit) > 0) ", 这个也对我起了作用。你是在GridView的RowDataBound事件中绑定Dropdown吗?请检查更新后的答案。 - R.C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接