如何删除数据网格wpf中的选定行

本文关键字:wpf 网格 数据网 何删除 删除 数据 | 更新日期: 2023-09-27 18:27:35

我正在使用WPF数据网格,我需要删除选定的行,我的代码是

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

但是当我使用这个代码显示错误

ItemsSource正在使用时操作无效。访问和修改具有ItemsControl.ItemsSource而不是的元素

如何删除所选行?

如何删除数据网格wpf中的选定行

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

1) 定义一个具有ObservableCollection属性的类型,该属性包含在网格上显示值的对象列表。

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

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

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

我认为您正在使用itemSource来填充dataGridview。从数据源中删除该项,然后刷新绑定。

或者让您的数据源类从INotifyPropertyChanged继承并引发PropertyChanged事件,并在列表框XAML上将UpdateSourceTrigger设置为PropertyChanged事件,如下图所示:

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

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

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