2009-05-21 8 views
0

私はcheckboxlistを持っており、データベーステーブルからロードされたサービスのリストを含んでいます。これらのサービスのそれぞれは、単独で、または他の特定のサービスでのみ実行できます。たとえば、「転送プロパティ」を選択した場合、「登録」を同時に選択することはできません。チェック項目をチェック項目に応じて動的に有効/無効にするにはどうすればいいですか?

私は、サービスと各サービスと一緒に選択できるサービスの関係を含むテーブルを持っています(私はそれを正しく説明しましたか?)。私は必要なもの

...私は親項目のチェックを外したときに無効化/許可しないが、そのサービスに関連していないすべてのサービスのチェック、および再有効化の項目という、サービスをクリックしてすることです

これを行うには良い方法がありますか?つまり、これを行う方法はありますか?

+0

です:

、それはこのような何かを見ることができる私は

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

で何youreのを探しているの鍵を信じるか、このコンテキストでは、あまりにも

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

作品ラジオボタンリストのようなことをしようとしていますか? 私はあなたのポイントを得ていない – Shimmy

答えて

0

まず、CheckBoxListでAutoPostBackをtrueに設定する必要があります。あなたは

<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; 
     } 
関連する問題