Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从datagrid中删除无效行?_C#_Wpf_Mvvm_Datagrid - Fatal编程技术网

C# 如何从datagrid中删除无效行?

C# 如何从datagrid中删除无效行?,c#,wpf,mvvm,datagrid,C#,Wpf,Mvvm,Datagrid,应用程序结构说明: 语言是C#,带有WPF和MVVM模式。视图基本上是一个数据网格,用于显示一些数据表值(通过ViewModel)。允许用户从网格中添加、编辑和删除行。由于从数据库中检索值并随后将其插入,因此应用了一些值限制(无空值、仅数值等) 可以直接对DataGrid进行数据修改,但也有一个单独的对话框用于编辑和添加新行。“删除”按钮的工作方式是,ViewModel从DataTable中查找选定的DataGrid行,删除这些行,并自动将更改更新为DataGrid 问题: 所以我遇到了这样一个

应用程序结构说明:

语言是C#,带有WPF和MVVM模式。视图基本上是一个数据网格,用于显示一些数据表值(通过ViewModel)。允许用户从网格中添加、编辑和删除行。由于从数据库中检索值并随后将其插入,因此应用了一些值限制(无空值、仅数值等)

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

问题:

所以我遇到了这样一个问题:用户试图向DataGrid插入无效数据,红色感叹号表示插入的数据有问题(我猜是验证错误?)。如果此时用户希望重新开始并选择要删除的无效行,则无法删除该行,因为该行不存在于模型中,而仅存在于DataGrid中。试图直接从DataGrid中删除无效的DataGridRow会引发一个异常,指出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 += ...