2012-03-06 432 views
0

我在我的网页上有一个CheckBox和一个CheckBox列表。
如果CheckBox被选中,在CheckBoxList所有CheckBoxes应该得到,而如果选择的CheckBox未被选中,同样都在CheckBoxCheckBoxes应该得到取消选中状态(未选中)。选择CheckBoxList中的所有复选框

的.aspx代码

<asp:CheckBoxList ID="CheckBoxList1" runat="server" 
      RepeatDirection="Horizontal" RepeatLayout="Flow"> 
      <asp:ListItem>Item A</asp:ListItem> 
      <asp:ListItem>Item B</asp:ListItem> 
      <asp:ListItem>Item C</asp:ListItem> 
      <asp:ListItem Selected="True">Item D</asp:ListItem> 
      <asp:ListItem>Item E</asp:ListItem> 
      <asp:ListItem>Item F</asp:ListItem> 
      <asp:ListItem>Item G</asp:ListItem> 
     </asp:CheckBoxList> 
<asp:CheckBox ID="allChkBox" Text="Select all" runat="server" 
       oncheckedchanged="allChkBox_CheckedChanged" /> 

我试图做服用点这样的,但它didb't工作:

bool prevSelection = false; 
protected void allChkBox_CheckedChanged(object sender, EventArgs e) 
    { 
if (!prevSelection) 
     { 
      foreach (ListItem chkitem in CheckBoxList1.Items) 
      { 
       chkitem.Selected = true; 
      } 
     } 
     else 
     { 
      foreach (ListItem chkitem in CheckBoxList1.Items) 
      { 
       chkitem.Selected = false; 
      } 
     } 
     prevSelection = !prevSelection; 
} 
+0

你能提供你的aspx代码? – 2012-03-06 03:09:12

+0

@ Thit Lwin Oo:新增 – Cipher 2012-03-06 03:11:57

+0

好的..其他人提供了答案。我会建议..你应该在客户端JavaScript中做到这一点,并且不需要回发。 – 2012-03-06 03:21:10

回答

4

我更喜欢使用客户端脚本这样的事情让你的页面不必须做回发

如果这是一个可能性,尝试射击点击一个JavaScript函数做循环和选择......像

<script type="text/javascript"> 
checked=false; 
function checkedAll (frm1) { 
    var aa= document.getElementById('frm1'); 
    if (checked == false) 
      { 
      checked = true 
      } 
     else 
      { 
      checked = false 
      } 
    for (var i =0; i < aa.elements.length; i++) 
    { 
      if(aa.elements[i].type == 'checkbox') { 
      aa.elements[i].checked = checked; 
      } 
    } 
} 
</script> 
+1

需要检查html输入类型.. aa.elements [i] .type =='checkbox' – 2012-03-06 03:23:56

+0

Thanks @ThitLwinOo - updated – jaySF 2012-03-06 03:31:28

+0

我正在考虑使用复选框而不是按钮单击来检查/取消选中所有复选框。但是,它看起来像'CheckBoxAll'没有客户端功能,可以检测'CheckBox'是否未被选中/检查。可以使用“复选框”来完成,即,如果勾选了“CheckBoxAll”,它应该自动检查所有其他复选框。 – Cipher 2012-03-06 04:21:25

1

这已经有一段时间,因为我在ASP已经涉足。 NET,但是您的prevSelection字段将根据每个请求初始化为false。该值不会在请求之间持续存在。所以,你要么需要从那里存放在视图状态或高速缓存,并加载它在你的事件处理程序,或者,甚至更好,你的方法改变这样的事情:

protected void allChkBox_CheckedChanged(object sender, EventArgs e) 
{ 
    foreach (ListItem chkitem in CheckBoxList1.Items) 
    { 
     chkitem.Selected = allChkBox.Selected; 
    } 
} 
0

而不是使用函数外的变量,如何使用复选框我自行宣布:

protected void allChkBox_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox chkbox = sender; 

    foreach (ListItem chkitem in CheckBoxList1.Items) 
    { 
     chkitem.Selected = chkbox.Selected; 
    } 
} 
0

你可以用这样的

var allChecked = (from ListItem item in CheckBoxList1.Items 
           where item.Selected 
           select int.Parse(item.Value)).ToList(); 


    var all = (from ListItem item in CheckBoxList1.Items 

            select int.Parse(item.Value)).ToList(); 
0
function CheckUnCheckAll() 
    { 
     var list = document.getElementById("<%=DataList1.ClientID%>") ; 
     var chklist = list.getElementsByTagName("input"); 
     for (var i=0;i<chklist.length;i++) 
     { 
      if (chklist[i].type=="checkbox") 
      { 
       chklist[i].checked = checkoruncheck; 
      } 
     } 
    } 
0

这个怎么样IIF我理解了要求右)LINQ做呢?这将使得在默认情况下,CheckBoxList控件的所有项目selected当它呈现:

protected void Page_Load(object sender, EventArgs e) 
 
{ 
 
    if (Page.IsPostBack) return; 
 
    LoadCountryList(); 
 
} 
 

 

 
private void LoadCountryList() 
 
{ 
 
    _ctx = new PayLinxDataContext(); 
 

 
    chkCountries.DataSource = _ctx.Countries.OrderBy(c => c.Name); 
 
    chkCountries.DataBind(); 
 

 
    foreach (ListItem item in chkCountries.Items) 
 
    { 
 
    item.Selected = true; 
 
    } 
 
}