2014-09-25 3 views
0

Вот мой текущий вид сетки.DropdownList с флажком в GridView

<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

Было бы полезно, чтобы увидеть ваш код позади, пожалуйста, специально для 'OnRowDataBound()' – geedubb

+0

Добавлен OnRowDataBound метод. – Cannon

ответ

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 
} 
Смежные вопросы