2011-02-06 78 views
3

我有一個ListView,裏面有一個複選框字段,它動態獲取id集。檢查listview內的複選框的值

我也有一個按鈕,當按下時需要檢查是否有任何checboxes已被檢查,但我不知道如何完成這項工作。

有關如何完成此任務的任何想法?

感謝

這是我的代碼:

<asp:ListView ID="ListView1" runat="server" DataKeyNames="Id" 
    DataSourceID="EntityDataSource1" EnableModelValidation="True"> 

    <ItemTemplate> 
     <tr> 
      <td class="firstcol"> 
       <input id='Checkbox<%# Eval("Id") %>' type="checkbox" /> 
      </td> 
     </tr> 
    </ItemTemplate> 

    <LayoutTemplate> 
     <table width="100%" border="0" cellspacing="0" cellpadding="0"> 
      <tr> 
       <th width="50" scope="col" class="firstcol"> 

       </th> 
      </tr> 
      <tr ID="itemPlaceholder" runat="server"></tr> 
     </table> 
     <asp:Button ID="btnDownload" runat="server" Text="Download" Height="26px" 
    onclick="btnDownload_Click" /> 
    </LayoutTemplate> 
</asp:ListView> 



protected void btnDownload_Click(object sender, EventArgs e) 
{ 
    ??????? 
} 

回答

5

免責聲明:我更後端/ WPF開發的。有可能更優雅的解決方案,但這似乎工作。

更改您的複選框的ID,所以它不是唯一的(對不起,這將打破W3C驗證),並設置它的Runat服務器,並設置複選框的值到數據源的ID:

<ItemTemplate> 
<tr> 
    <td class="firstcol"> 
    <label runat="server"><%# Eval("Id") %></label> 
    <input id="MyCheckBox" value='<%# Eval("Id") %>' 
      type="checkbox" runat="server" /> 
    </td> 
</tr> 
</ItemTemplate> 

你可以然後通過ListView的項集合迭代,並找到對應的複選框:

protected void btnDownload_Click(object sender, EventArgs e) 
{ 
    foreach(ListViewDataItem item in ListView1.Items) 
    { 
    var chk = item.FindControl("MyCheckBox") as System.Web.UI.HtmlControls.HtmlInputCheckBox; 
    if(chk != null && chk.Checked) 
    { 
     string value = chk.Value; 
    } 
    } 
} 

如果你想一點的LINQ:

protected void btnDownload_Click(object sender, EventArgs e) 
{ 
    var checkedCheckBoxes = ListView1.Items.Select(x => x.FindControl("MyCheckBox") as HtmlInputCheckBox) 
    .Where(x => x != null && x.Checked); 

    // do stuff with checkedCheckBoxes 
}