2011-02-06 76 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 
}