2012-03-06 357 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; 
 
    } 
 
}