GridView中带有Checkbox的DropdownList

时间:2014-09-25 16:53:31

标签: c# asp.net

这是我当前的网格视图。

<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#

1 个答案:

答案 0 :(得分:0)

怎么样:

<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
}