2009-05-21 57 views
0

我有一個checkboxlist它包含從數據庫表中加載的服務列表。這些服務中的每一個只能單獨執行或與其他特定服務一起執行。例如,如果我選擇「傳輸屬性」,我不能同時選擇「註冊」。如何根據選中的項目動態/停用檢查表項目?

我有一個表格,其中包含服務之間的關係,以及可以與每種服務一起選擇哪些服務(我是否正確地解釋了它?)。

我需要做的是單擊服務,然後禁用/禁止檢查所有不涉及該服務的服務,並重新啓用,當我取消選中父項物品...

有沒有一個很好的方法來做到這一點?我的意思是,有沒有辦法做到這一點?

+0

你試圖做一個單選按鈕列表? 我沒有明白你的意思 – Shimmy 2009-05-21 02:17:25

回答

0

首先,您的CheckBoxList將需要AutoPostBack設置爲true。

我認爲,關鍵您所渴望的是什麼

CheckBoxList1.Items.FindByText(service).Enabled = false; 

或這個工程太

CheckBoxList1.Items.FindByText(service).Attributes.Add("disabled", "disabled"); 

的情況下,它可能是這個樣子:

<asp:CheckBoxList ID="CheckBoxList1" runat="server" AutoPostBack="True" 
     onselectedindexchanged="CheckBoxList1_SelectedIndexChanged">   
    </asp:CheckBoxList> 

    protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e) 
    { 

     //first reset all to enabled 
     for (int i = 0; i < CheckBoxList1.Items.Count; i++) 
     { 
      CheckBoxList1.Items[i].Attributes.Remove("disabled", "disabled"); 
     } 

     for (int i = 0; i < CheckBoxList1.Items.Count; i++) 
     { 

      if (CheckBoxList1.Items[i].Selected) 
      { 
       //get list of items to disable 
       string selectedService = CheckBoxList1.Items[i].Text; 
       List<string> servicesToDisable = getIncompatibleFor(selectedService);//this function is up to u 
       foreach (string service in servicesToDisable) 
       { 
        CheckBoxList1.Items.FindByText(service).Attributes.Add("disabled", "disabled");             
       }     
      } 
     } 
    } 
0
void ControlCheckBoxList(int selected, bool val) 
    { 
     switch (selected) 
     { 
      case 1: 
      case 2: 
      case 3: 
       checkedListBox1.SetItemChecked(5, !val); 
       break; 
      case 6: 
       checkedListBox1.SetItemChecked(1, true); 
       break; 
      default: 
       checkedListBox1.ClearSelected(); 
       break; 
     } 
    } 

    private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) 
    { 
     ControlCheckBoxList(e.Index, e.NewValue == CheckState.Checked ? true : false); 
    } 
0

1)力的複選框,自動回傳,然後在回發檢查是檢查什麼價值/未選中狀態,然後啓用/根據需要禁用其他複選框。

2)嘗試做類似於AJAX的事情。

0

那麼,JavaScript可能是最好的做這個客戶端,否則你可以嘗試這樣的代碼。

 List<Service> services = new List<Service>(); //get your services 

     foreach (ListItem li in lstRoles.Items) 
     { 
      Predicate<Service> serviceIsAllowed = delegate (Service s) { return /*some expression using s and li.Value (or use a lambda expr) */; } 

      li.Selected = services.Find(serviceIsAllowed) != null; 
     } 
相關問題