GridView中带有复选框的下拉列表

本文关键字:下拉列表 复选框 GridView | 更新日期: 2023-09-27 18:24:22

这是我当前的网格视图。

<asp:GridView ID="grdIndexGroupMap" runat="server" AutoGenerateColumns="False" DataKeyNames="IndexName"
            OnRowCancelingEdit="grdIndexGroupMap_RowCancelingEdit" OnRowDataBound="grdIndexGroupMap_RowDataBound"
            OnRowEditing="grdIndexGroupMap_RowEditing" OnRowUpdating="grdIndexGroupMap_RowUpdating"
            OnRowCommand="grdIndexGroupMap_RowCommand" ShowFooter="True" OnRowDeleting="grdIndexGroupMap_RowDeleting"
            CellPadding="1" CellSpacing="1" ForeColor="#333333" GridLines="None">
            <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
            <Columns>
                <%--IndexName--%>
                <asp:TemplateField HeaderText="IndexName" HeaderStyle-HorizontalAlign="Left">
                    <EditItemTemplate>
                        <asp:DropDownList ID="cmbIndexName" runat="server" DataTextField="LocationName" DataValueField="IndexId"></asp:DropDownList>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="lblIndexName" runat="server" Text='<%# Eval("IndexName") %>'></asp:Label>
                    </ItemTemplate>
                    <FooterTemplate>
                        <asp:DropDownList ID="cmbNewIndexName" runat="server" DataTextField="IndexName" DataValueField="IndexId"></asp:DropDownList>
                    </FooterTemplate>
                    <HeaderStyle HorizontalAlign="Left"></HeaderStyle>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

如何将DropDownList替换为可以选择多个项目的下拉列表?下拉列表中的复选框列表或下拉列表中具有多选的列表框。选中时将显示逗号分隔的值。

尝试了几种方法,但没有成功。

这是我的数据绑定方法:

protected void grdIndexGroupMap_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                DropDownList cmbIndexName = (DropDownList)e.Row.FindControl("cmbIndexName");
                if (cmbIndexName != null)
                {
                    cmbIndexName.DataSource = _Indexes;
                    cmbIndexName.DataTextField = "IndexName";
                    cmbIndexName.DataValueField = "IndexId";
                    cmbIndexName.DataBind();
                    cmbIndexName.SelectedValue = grdIndexGroupMap.DataKeys[e.Row.RowIndex].Values[1].ToString();
                }
            }
            if (e.Row.RowType == DataControlRowType.Footer)
            {  
                DropDownList cmbNewIndexName = (DropDownList)e.Row.FindControl("cmbNewIndexName");
                cmbNewIndexName.DataSource = _Indexes;
                cmbNewIndexName.DataBind();
            }
        }

我使用的是ASP.Net,C#

GridView中带有复选框的下拉列表

怎么样:

<asp:TemplateField HeaderText="IndexName" HeaderStyle-HorizontalAlign="Left">
    <EditItemTemplate>
        <asp:PlaceHolder id="phListContainer" runat="server" />
    </EditItemTemplate>

然后在你的代码后面:

if (e.Row.RowType == DataControlRowType.DataRow)
{
    phListContainer = (PlaceHolder)e.Row.FindControl(phListContainer);
    if (phListContainer != null)
    {
        //Adding a DropDownList
        var cmbIndexName = new DropDownList();
        cmbIndexName.DataSource = _Indexes;
        cmbIndexName.DataTextField = "IndexName";
        cmbIndexName.DataValueField = "IndexId";
        cmbIndexName.DataBind();
        cmbIndexName.SelectedValue = grdIndexGroupMap.DataKeys[e.Row.RowIndex].Values[1].ToString();
        phListContainer.Controls.Add(cmbIndexName);
        // OR
        //Adding a CheckBoxList;
        cmbIndexName = new CheckBoxList();
        cmbIndexName.DataSource = _Indexes;
        cmbIndexName.DataTextField = "IndexName";
        cmbIndexName.DataValueField = "IndexId";
        cmbIndexName.DataBind();
        phListContainer.Controls.Add(cmbIndexName);
    }
}

然后你可以通过获得控制

var cbList = (CheckBoxList)e.Row.FindControl(phListContainer).Controls[0];

然后你可以循环浏览并找到复选框

for(int i = 0; i < cbList.Items.Count; ++i)
{
if(cbList.Items[i].Selected)
//Do stuff
}