2017-06-15 3 views
1

Ich habe einen CheckBoxList, und ich will die ListItem bekommen, wenn ich wählen, und deaktivieren Sie, dass diese Lösung ist Einzelteil tryed habenWie holen Sie das ListItem von CheckBoxList, dass seine Selected Eigenschaft geändert hat?

protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var selectedItem = CheckBoxList1.SelectedItem; 
} 

Wenn ich ein Element auszuwählen, es dass item.but zurückkehren, wenn ich ein abzuwählen Das Element gibt null (wenn ein Element nicht ausgewählt ist) oder ein anderes Element zurück (wenn ein anderes ausgewähltes Element vorhanden ist).

Wie soll ich den Artikel, den ich jetzt deaktiviert habe, bekommen?

Antwort

1

können Sie ein Session-Variable erstellen, die den Überblick über aktuell ausgewählte Elemente halten:

protected void Page_Load(object sender, EventArgs e) 
{ 
    CheckBoxList1.AutoPostBack = true; 

    List<ListItem> selectedItems = Session["SelectedItems"] as List<ListItem>; 
    if(selectedItems == null) 
    { 
     Session["SelectedItems"] = new List<ListItem>(); 
    } 
} 

Dann ändern jedes Mal ausgewählte Elemente, die Sie vorher ausgewählte Elemente mit neuen ausgewählten Elementen vergleichen und herauszufinden, welches Element ausgewählt wurde oder Abwahl:

protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    // Gather currently selected items 
    List<ListItem> newSelectedItems = new List<ListItem>(); 
    foreach (ListItem item in CheckBoxList1.Items) 
    { 
     if (item.Selected == true) 
     { 
      newSelectedItems.Add(item); 
     } 
    } 

    List<ListItem> oldSelectedItems = Session["SelectedItems"] as List<ListItem>; 

    // Compare previous items count with current items count 
    // to find out whether item has been selected or deselected 
    if (newSelectedItems.Count > oldSelectedItems.Count) 
    { 
     // Item has been selected 
     ListItem selectedItem = newSelectedItems.Except(oldSelectedItems).First(); 
    } 
    else 
    { 
     // Item has been deselected 
     ListItem deselectedItem = oldSelectedItems.Except(newSelectedItems).First(); 
    } 

    Session["SelectedItems"] = newSelectedItems; 
} 
+0

Ich habe Ihre Lösung verwendet, aber ich erstellt 'UserControl', aber inestad von' session' Ich benutze und statische property.tankyou – mohsen

+0

Und Ihre Antwort hat ein anderes Problem, wenn ich die Datenbindung verwende. – mohsen

0

ich habe wie dieses Custom erstellt und verwendet ‚Krzysztof Bracha‘ Lösung .this Weg, es einfacher zu bedienen

Usercontrol:

public class JooyaCheckBoxList : CheckBoxList 
{ 
    public JooyaCheckBoxList() 
    { 
     base.SelectedIndexChanged += JooyaCheckBoxList_SelectedIndexChanged; 
     base.PreRender += JooyaCheckBoxList_PreRender; 
    } 

    private void JooyaCheckBoxList_PreRender(object sender, EventArgs e) 
    { 
     SelectedItems = Items.Cast<ListItem>().Where(li => li.Selected).ToList(); 
    } 
    private static List<ListItem> SelectedItems { get; set; } 
    private void JooyaCheckBoxList_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     List<ListItem> CurrentSelectedItems = Items.Cast<ListItem>().Where(li => li.Selected).ToList(); 
     if (CurrentSelectedItems.Count > SelectedItems.Count) 
     { 
      var li = CurrentSelectedItems.Except(SelectedItems).SingleOrDefault(); 
      OnSelectedPropertChaned(li); 
     } 
     else if (CurrentSelectedItems.Count < SelectedItems.Count) 
     { 
      var li = SelectedItems.Except(CurrentSelectedItems).SingleOrDefault(); 
      OnSelectedPropertChaned(li); 
     } 
     else 
     { 
      OnSelectedPropertChaned(null); 
     } 
    } 

    public event EventHandler<ListItem> SelectedPropertyChaned; 
    public void OnSelectedPropertChaned(ListItem changedItem) 
    { 
     SelectedPropertyChaned?.Invoke(this, changedItem); 
    } 
} 

und ich, dass wie folgt aus:

protected void cblKeywords_SelectedPropertyChaned(object sender, ListItem changedItem) 
    { 
      MessageDisplay= changedItem.Text + " || " + changedItem.Value; 
    } 
Verwandte Themen