【问题标题】:How I can Delete Selected Row in datagrid wpf?如何删除 datagrid wpf 中的选定行?
【发布时间】:2014-12-17 20:53:23
【问题描述】:

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

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

但是当我使用这段代码时,会显示错误

使用 ItemsSource 时操作无效。访问和修改 用 ItemsControl.ItemsSource 代替的元素

如何删除选定的行?

【问题讨论】:

  • 异常非常明显。您需要从ItemsSource(基础集合)中删除该项目,而不是尝试从dataGridView1.Items 集合中删除。

标签: c# wpf datagrid


【解决方案1】:

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

1) 定义一个具有ObservableCollection 属性的类型,该属性包含一个对象列表,用于呈现网格上的值。

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

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

【讨论】:

  • 我执行了 1 和 2 步,但我不知道如何从控件的 ui 中删除
  • @MahmoudKassem:您需要从集合本身中删除,如果它正确绑定到控件,该行将从控件本身中消失。
【解决方案2】:

猜测您的 DataGrid 绑定到 ItemsSource(例如 ObservableCollection)。在这种情况下,不允许从 View 操作 ItemsSource,您必须在 ViewModel 中将其删除(即存储绑定对象的位置)。

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-26
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 2020-10-03
        • 2018-07-09
        • 2014-08-22
        • 1970-01-01
        相关资源
        最近更新 更多