2017-07-12 96 views
0

私はチェックボックスを含むDataGridを持っています。私は、チェックボックスが削除ボタンをクリックしてチェックされているDataGridからすべての行を削除したいと思います。私のDataGridのXAMLを以下に示します。チェックボックスと削除ボタンを使用して複数の行をWPFデータグリッドから削除

このチェックボックスをオンにしたすべての行を削除するには、クリックボタンのコードを記述します。

private void btnDelete_Click(object sender, RoutedEventArgs e) 
    { 
     //Delete logic here 

    } 

どうすればよいですか? NB:ADOではなくEntityFrameworkを使用しています。 ObservableCollection<Order>

+0

現在の動作は、想定されている動作に合わせて試したものに基づいています。チェックボックスが正しくバインドされている場合は、 'SelectedItems'を取得してコレクションから削除するだけです。 – Nkosi

+0

コードスニペットが役立つかもしれません。チェックされている行を取得する方法 – KMarto

答えて

1

まずボタンを次に確認DataGridSelectionMode

SelectionMode="Extended" 

を経由して複数選択を可能にするようにデータグリッドは、タイプ注文の観察可能なコレクションにバインドされているに基づいてグリッドから選択した項目を取得する]をクリックIsSelected

private void btnDelete_Click(object sender, RoutedEventArgs e) { 
    //get selected items 
    if (orders.SelectedItems != null && orders.SelectedItems.Count > 0) { 
     var toRemove = orders.SelectedItems.Cast<Order>().ToList(); 
     //Delete logic here 
     //...remove items from EF and save 

     //Once confirmed remove from items source 
     var items = orders.ItemsSource as ObservableCollection<Order>; 
     if (items != null) { 
      foreach (var order in toRemove) { 
       items.Remove(order);  
      } 
     } 
    } 
} 
1
Write code behind like this.... 
     public MainWindow() 
     { 
      InitializeComponent(); 
      List<Great> p = new List<Great>(); 
      p.Add(new Great() { Name = "Good" }); 
      p.Add(new Great() { Name = "Bad" }); 
      p.Add(new Great() { Name = "Ugly" }); 
      orders.ItemsSource = p; 

     } 

     private void Button_Click(object sender, RoutedEventArgs e) 
     { 
      List<Great> SelectedOrders = new List<Great>(); 
      for (int i = 0; i < orders.SelectedItems.Count; i++) 
      { 
       SelectedOrders.Add((Great)orders.SelectedItems[i]); 
      } 
      var kk = orders.ItemsSource as List<Great>; 
      foreach (var item in SelectedOrders) 
      { 
       kk.Remove(item); 
      } 
      orders.Items.Refresh(); 
     } 

     public class Great 
     { 
      public string Name { get; set; } 
     } 
0

ちょうど上Clear()メソッドを呼び出すビューの結合ObservableCollection<Order>

private void btnDelete_Click(object sender, RoutedEventArgs e) 
{ 
    var sourceCollection = orders.ItemsSource as ObservableCollection<Order>; 
    if (orders != null) 
     orders.Clear(); 
} 
関連する問題