C# 如何从datagrid中删除无效行?
应用程序结构说明: 语言是C#,带有WPF和MVVM模式。视图基本上是一个数据网格,用于显示一些数据表值(通过ViewModel)。允许用户从网格中添加、编辑和删除行。由于从数据库中检索值并随后将其插入,因此应用了一些值限制(无空值、仅数值等) 可以直接对DataGrid进行数据修改,但也有一个单独的对话框用于编辑和添加新行。“删除”按钮的工作方式是,ViewModel从DataTable中查找选定的DataGrid行,删除这些行,并自动将更改更新为DataGrid 问题: 所以我遇到了这样一个问题:用户试图向DataGrid插入无效数据,红色感叹号表示插入的数据有问题(我猜是验证错误?)。如果此时用户希望重新开始并选择要删除的无效行,则无法删除该行,因为该行不存在于模型中,而仅存在于DataGrid中。试图直接从DataGrid中删除无效的DataGridRow会引发一个异常,指出DataGrid绑定到模型,并且应该在那里进行任何修改 最后一个问题:C# 如何从datagrid中删除无效行?,c#,wpf,mvvm,datagrid,C#,Wpf,Mvvm,Datagrid,应用程序结构说明: 语言是C#,带有WPF和MVVM模式。视图基本上是一个数据网格,用于显示一些数据表值(通过ViewModel)。允许用户从网格中添加、编辑和删除行。由于从数据库中检索值并随后将其插入,因此应用了一些值限制(无空值、仅数值等) 可以直接对DataGrid进行数据修改,但也有一个单独的对话框用于编辑和添加新行。“删除”按钮的工作方式是,ViewModel从DataTable中查找选定的DataGrid行,删除这些行,并自动将更改更新为DataGrid 问题: 所以我遇到了这样一个
如何删除模型中不存在的无效DataGridRow?如果您实现了MVVM模式,那么除了将observablecollection中的更改链接到数据层以将其连接到DB之外,您无需做任何事情 您还可以将DataGrid定义为:
<DataGrid ItemsSource="{Binding Items}" SelectedItem="{Binding ActiveItem}" .../>
希望有帮助如果模型中不存在无效行,则无法删除它,但同样,如果不存在无效行,则强制DataGrid重新呈现数据应仅显示有效行。您可以尝试DataGrid.Items.Refresh()-我不确定这是否有效,但值得一试。谢谢您的回复。我尝试了此操作,但出现异常,声明“AddNew或EditItem事务期间不允许“刷新”。显然,无效数据会导致Datagrid“卡在”编辑状态或类似状态。您可以尝试在刷新之前调用CencelEdit()。这将清除编辑模式,尽管在使用WPF时,我已经看到了DataGrids的一些非常奇怪的行为。我最终放弃了它们,使用一个列表框和一个从面板派生的对象来表示每一行,滚动我自己的组件。只是想一想,你是否尝试过选择行并使用“删除”按钮删除?@Alex:尝试在刷新之前调用CancelEdit()。和以前一样的例外。
ActiveItem.PropertyChanged += ...