2009-05-21 3 views
0

Ich habe eine checkboxlist, die eine Liste von Diensten enthält, die aus einer Datenbanktabelle geladen werden. Jeder dieser Dienste kann nur alleine oder mit anderen spezifischen Diensten ausgeführt werden. Zum Beispiel, wenn ich "Transfer Property" wähle, kann ich nicht "Register" gleichzeitig auswählen.Wie aktiviere/deaktiviere ich Checklistenpunkte dynamisch nach geprüften Positionen?

Ich habe eine Tabelle, die die Beziehungen zwischen Diensten und welche Dienste zusammen mit jedem Dienst ausgewählt werden können (habe ich es richtig erklärt?).

Was ich brauche, ist eine Dienstleistung klicken und dann auf Deaktivieren/Disallow Überprüfung aller Dienste, die nicht zu diesem Dienst verwendet und erneut aktiviert, dass Gegenstände, wenn ich das übergeordnete Element Uncheck ...

Gibt es einen guten Weg, dies zu tun? Ich meine, gibt es irgendeinen Weg, dies zu tun?

+0

Sind Sie versuchen, etwas wie eine Radio-Button-Liste zu tun? Ich habe Ihren Standpunkt nicht verstanden – Shimmy

Antwort

0

Zunächst muss Ihre CheckBoxList AutoPostBack auf true gesetzt haben.

Ich glaube, der Schlüssel zu dem, was youre suchen ist

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

oder das funktioniert auch

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

in Zusammenhang es so etwas wie dies aussehen könnte:

<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) Zwingen Sie Ihre Checkbox Auto-Postbacks und dann auf der Post wieder überprüfen, welchen Wert wurde nicht markiert geprüft/und aktivieren/deaktivieren Sie die anderen Kontrollkästchen nach Bedarf.

2) Versuchen Sie etwas ähnliches mit AJAX zu tun.

0

Nun, Javascript vielleicht am besten für diese Client-Seite, sonst können Sie etwas wie das im Code versuchen.

 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; 
     } 
Verwandte Themen