2014-10-22 142 views
4

我使用WPF數據網格我需要刪除選定的行,我的代碼是如何刪除datagrid wpf中的選定行?

private void dataGridView1_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Delete) 
    { 
     this.dataGridView1.Items.Remove(this.dataGridView1.SelectedItem); 
    } 
} 

但是,當我使用此代碼告訴我錯誤

操作是無效的,同時的ItemsSource正在使用中。使用ItemsControl.ItemsSource訪問和修改 元素,而不是

如何刪除所選行?

+4

異常很清楚。您需要從'ItemsSource'(底層集合)中刪除該項目,而不是試圖從'dataGridView1.Items'集合中刪除。 – 2014-10-22 12:00:13

回答

5

您從不必從WPF網格中刪除該行。你需要做的是:

1)定義一個ObservableCollection屬性的類型,其中包含一個呈現網格值的對象列表。

2)將該屬性綁定到您的網格控件。

3)現在如果您添加/刪除綁定集合中的對象,相應的行將分別從控件的UI中添加/刪除。

+0

我執行了1步和2步,但我不知道如何從控件的用戶界面中刪除 – 2014-10-22 13:14:30

+0

@MahmoudKassem:您需要從集合本身中刪除,如果它正確綁定以進行控制,則該行將從控件本身消失。 – Tigran 2014-10-22 13:27:51

1

正如綁定到DataSource的UI控件的錯誤描述中明確提到的,您應該操縱數據源本身而不是UI控件(在本例中爲數據網格)。

UI控件只是一種在用戶界面中呈現數據的方式,以顯示已編輯或新的或已修改的數據(例如,少於一行),您只需對已分配給DataGrid的基礎數據源ItemSource屬性。

2

我想你正在使用一個itemSource來填充dataGridview。 從數據源中刪除項目,然後刷新綁定。

或者讓你的數據源類從INotifyPropertyChanged繼承和養PropertyChanged事件,並在列表框XAML設置UpdateSourceTrigger爲PropertyChanged事件,如下面:

ItemsSource="{Binding MyListItems, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged} 
2

是猜測你的DataGrid綁定到的ItemsSource (例如一個ObservableCollection)。在這種情況下,不允許從視圖中操作ItemsSource,而您必須在ViewModel中移除它(這是存儲綁定對象的地方)。