2017-06-15 3 views
1

私は、CheckBoxListのを持っていると私は私が選択したときのListItemを取得し、私は項目を選択すると、私は1つの選択を解除するとき、それはitem.butことを返しますSelectedItemプロパティが変更されたCheckBoxListからListItemを取得するにはどうすればよいですか?

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

item.Iは、このソリューションをしようと試みていることを選択解除したいですitemはnull(アイテムが選択されていない場合)または別のアイテム(選択された別のアイテムがある場合)を返します。

ここで選択解除したアイテムはどうすれば入手できますか?

答えて

1

あなたは、現在選択されている項目を追跡しますセッション変数を作成することができます。

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>(); 
    } 
} 

その後、選択した項目では、新しい選択した項目で、以前に選択した項目を比較して、項目が選択されたかを調べることができます変更するたびか選択解除:

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

私はあなたのソリューションを使用していたが、私は 'UserControl'が、私は使っ' Session'のinestadと静的property.tankyouを作成し – mohsen

+0

あなたの答えには、データバインディングを使用するときに別の問題があります。 – mohsen

0

私はこのようなCustomControlを作成し、使用しているが、「クシシュトフBracha」ソリューションは、それは単純に使用する方法を.this

ユーザーコントロール:

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); 
    } 
} 

と私はこのようなことを使用:

protected void cblKeywords_SelectedPropertyChaned(object sender, ListItem changedItem) 
    { 
      MessageDisplay= changedItem.Text + " || " + changedItem.Value; 
    } 
関連する問題