2014-09-25 66 views
0

这是我当前的网格视图。GridView中带有复选框的DropdownList

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

+0

e。通过

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

和控制,那么你可以循环最好能看到在你后面的代码,请特别适用于'OnRowDataBound()' – geedubb 2014-09-25 16:55:44

+0

新增OnRowDataBound方法有用。 – Cannon 2014-09-25 17:31:40

回答

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

然后你可以得到th通过并找到选中的复选框

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