2011-10-13 80 views
1

好日子的朋友,取2個複選框列出互斥

我知道我們如何才能讓兩個複選框或複選框互斥一個複選框列表內。 但是我的問題是從一點不同,希望得到堆棧溢出一些幫助,

好吧,我有兩個複選框列表如下,並從數據集表我收到的複選框值,

CheckBoxlist1 - Checkbox_selectColumns

if (IsDataSetNotEmpty(ds)) 
{ 
    CheckBox_selectColumns.Items.Clear(); 
    foreach (DataRow row in ds.Tables[0].Rows) 
    { 
    CheckBox_selectColumns.Items.Add(row[0].ToString()); 
    } 

} 

CheckBoxlist2 - Checkbox_selectFields

if (IsDataSetNotEmpty(ds)) 
{ 
    Checkbox_selectFields.Items.Clear(); 
    foreach (DataRow row in ds.Tables[1].Rows) 
    { 
    CheckBox_selectColumns.Items.Add(row[0].ToString()); 
    } 

} 

我會得到FOLL由於每個列表中的複選框。

Checkbox_selectColumns:僱員ID,名字,姓

Checkbox_selectFields:經理ID,經理FName參數,經理LName的

有什麼辦法,我可以使這兩個複選框互斥的,也就是說,如果我選擇第一個列表中的任何一個或多個複選框,我不應該選擇第二個列表中,反之亦然任何複選框..

謝謝...

+1

您可以檢查每個列表的「SelectedIndex」屬性 - 如果列表1的值大於等於0,禁用列表2,反之亦然。您還需要處理在一個列表中進行了選擇的情況,然後清除選擇(即,您必須在此時重新啓用禁用列表)。如果我有更多時間,我會嘗試將代碼示例放在一起。希望這會給你一些工作。 – Tim

回答

1

我建議使用控件的SelectedValue屬性,而不是循環遍歷CheckBox中的項目,因爲它通過回發持續存在(SelectedIndex沒有)(ListControl.SelectedValue Property):

protected void CheckBox_selectColumns_SelectedIndexChanged(object sender, EventArgs e)   
{    

    if (CheckBox_selectColumns.SelectedValue != "") 
    { 
     foreach (ListItem listItem in CheckBox_SelectAll.Items) 
     { 
      listItem.Selected = false; 
     } 
    } 
} 

protected void CheckBox_SelectAll_CheckChanged(object sender, EventArgs e) 
{ 

    if (CheckBox_SelectAll.SelectedValue != "") 
    { 
     foreach (ListItem listItem in CheckBox_selectColumns.Items) 
     { 
      listItem.Selected = false; 
     } 
    } 
} 
+0

完美!工作很好:)謝謝你這個簡單的解決方案。還有一個查詢,截至目前,我已在兩個列表中啓用了自動回覆功能。但是,無論何時我選擇或取消選擇列表中的任何一個chekbox,整個頁面都將重新加載。我知道我們可以使用Ajax更新面板。還想知道我們是否有任何解決方案在ASP.net。 – Jithu

+1

@Jithu - 不客氣。我不知道你周圍的工作是什麼意思 - 如果你指的是整頁回發,唯一的「變通」(這不是我會認爲是一個解決),我」 m知道是通過AJAX和UpdatePanel(通過ASP.NET)。 – Tim

+0

謝謝蒂姆,那麼我會繼續與阿賈克斯... – Jithu

0

嗨在這個問題上的工作後,與蒂姆的幫助提示,最後得到它的工作。請提供解決方案,如果您有簡單的解決方案。

protected void CheckBox_selectColumns_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      bool Is_select = false; 
      foreach (ListItem listItem in CheckBox_selectColumns.Items) 
      { 
       if (listItem.Selected) 
       { 
        Is_select = true; 
       } 

      } 

      if (Is_select) 
      { 
       foreach (ListItem listItem in CheckBox_SelectAll.Items) 
       { 
        if (listItem.Selected) 
        { 
         listItem.slected=false; 
        } 

       } 
      } 

     } 

對於第二個複選框列表卻反其道而行之..

 protected void CheckBox_SelectAll_CheckedChanged(object sender, EventArgs e) 
     { 
      bool Is_select = false; 
      foreach (ListItem listItem in CheckBox_SelectAll.Items) 
      { 
       if (listItem.Selected) 
       { 
        Is_select = true; 
       } 

      } 

      if (Is_select) 
      { 
       foreach (ListItem listItem in CheckBox_selectColumns.Items) 
       { 
        if (listItem.Selected) 
        { 
         listItem.slected=false; 
        } 

       } 
      } 
     } 

這一個工作正常,任何建議,使更精緻碼位將是真正有用的...