如何删除datagrid wpf中的选定行?

问题描述:

我使用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

您从不必从WPF网格中删除该行。你需要做的是:

1)定义一个ObservableCollection属性的类型,其中包含一个呈现网格值的对象列表。

2)将该属性绑定到您的网格控件。

3)现在如果您添加/删除绑定集合中的对象,相应的行将分别从控件的UI中添加/删除。

+0

我执行了1步和2步,但我不知道如何从控件的用户界面中删除 – 2014-10-22 13:14:30

+0

@MahmoudKassem:您需要从集合本身中删除,如果它正确绑定以进行控制,则该行将从控件本身消失。 – Tigran 2014-10-22 13:27:51

正如绑定到DataSource的UI控件的错误描述中明确提到的,您应该操纵数据源本身而不是UI控件(在本例中为数据网格)。

UI控件只是一种在用户界面中呈现数据的方式,以显示已编辑或新的或已修改的数据(例如,少于一行),您只需对已分配给DataGrid的基础数据源ItemSource属性。

我想你正在使用一个itemSource来填充dataGridview。 从数据源中删除项目,然后刷新绑定。

或者让你的数据源类从INotifyPropertyChanged继承和养PropertyChanged事件,并在列表框XAML设置UpdateSourceTrigger为PropertyChanged事件,如下面:

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

是猜测你的DataGrid绑定到的ItemsSource (例如一个ObservableCollection)。在这种情况下,不允许从视图中操作ItemsSource,而您必须在ViewModel中移除它(这是存储绑定对象的地方)。