【问题标题】:How to delete invalid row from datagrid?如何从数据网格中删除无效行?
【发布时间】:2015-10-30 18:04:19
【问题描述】:

应用结构说明:

语言是带有 WPF 和 MVVM 模式的 C#。 View 基本上是一个 DataGrid,用于显示一些 DataTable 值(通过 ViewModel)。允许用户从网格中添加、编辑和删除行。由于从数据库中检索值并随后插入回的数据库,一些值限制适用(没有空值,只有数字等)。

可以直接对 DataGrid 进行数据修改,但也有一个单独的对话框用于编辑和添加新行。删除按钮的工作方式是 ViewModel 从 DataTable 中找到选定的 DataGrid 行,将其删除,并且更改会自动更新到 DataGrid。

问题:

所以我遇到了这个问题,用户尝试将无效数据插入 DataGrid 并且出现红色感叹号表示插入的数据存在问题(我猜是验证错误?)。如果此时用户希望重新开始并选择要删除的无效行,则他无法删除该行,因为它不存在于模型中,而仅存在于 DataGrid 中。尝试直接从 DataGrid 中删除无效的 DataGridRow 会引发异常,指出 DataGrid 已绑定到模型并且应在此处进行任何修改。

最后一个问题:

如何删除模型中不存在的无效DataGridRow?

【问题讨论】:

  • 如果模型中不存在无效行,则无法删除它,但同样,如果它不存在,强制 DataGrid 重新渲染数据应该只显示有效行。您可以尝试 DataGrid.Items.Refresh() - 我不确定这是否有效,但值得一试。
  • 感谢您的回复。我尝试了这个并得到异常说明“在 AddNew 或 EditItem 事务期间不允许'刷新'。”显然无效数据会导致 Datagrid 处于编辑状态或类似状态。
  • 您可以尝试在刷新前调用 CecelEdit()。这应该清除编辑模式,尽管使用 WPF,我已经看到 DataGrids 的一些非常奇怪的行为。我最终放弃了它们,并使用列表框和从面板派生的对象来表示每一行来滚动我自己的组件。
  • 只是想一想,您是否尝试使用“删除”按钮选择行并删除?
  • @Alex:在刷新之前尝试调用 CancelEdit()。和以前一样的例外。

标签: c# wpf mvvm datagrid


【解决方案1】:

如果您实现 MVVM 模式,那么您无需执行任何操作,只需将 observablecollection 中的更改链接到数据层以将其连接到数据库。

您也可以将 DataGrid 定义为:

<DataGrid ItemsSource="{Binding Items}" SelectedItem="{Binding ActiveItem}" .../>

然后你可以在你的代码中对 Items 和 ActiveItem 的 PropertyChanged 事件做出反应,有点

ActiveItem.PropertyChanged += ... 

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    相关资源
    最近更新 更多