我已经坚持了好几个小时,希望有人可以对此有所了解。假设我有一个DataGrid
控件:
<DataGrid ItemsSource="{Binding Path=RealEstates, ValidatesOnExceptions=True}"
AutoGenerateColumns="True"
Name="grdData_RealEstate"
Margin="5,5,5,5"
Style="{StaticResource DataGridStyle}"
RowStyle="{StaticResource DataGridRowStyle}">
</DataGrid>
绑定到公开DataSet
的RealEstates表的propetry。
现在,当用户从该表中删除一行时,我想在允许或拒绝删除之前执行一些检查。
我所做的是订阅DataTable的RowDeleting
事件。
workingDataSet.Tables["realestates"].RowDeleting += Database_RowDeleting;
然后在处理它的方法中,我只是抛出异常。一旦我开始工作,实际逻辑将会跟随。
void Database_RowDeleting(object sender, DataRowChangeEventArgs e)
{
throw (new Exception("Can't delete"));
}
当我尝试删除DataGrid
中的任何行时,这会起作用并引发异常。但问题是DataGrid
控件没有捕获异常(DataGrid
控件的红色边框),导致我的程序关闭,显然不是我想要的。知道我在这里做错了什么吗?如何让DataGrid
捕获这些异常?
答案 0 :(得分:0)
好的,我为其他感兴趣的人提供了解决方案。
我订阅了RowDeleting
的{{1}}和RowDeleted
个事件:
DataTable
然后我创建了一个允许或拒绝删除的字段:
workingDataSet.Tables["realestates"].RowDeleting += Database_RowDeleting;
workingDataSet.Tables["realestates"].RowDeleted += Database_RowDeleted;
接下来,我在bool allowRowDelete;
方法中执行验证逻辑:
RowDeleting
然后在void Database_RowDeleting(object sender, DataRowChangeEventArgs e)
{
allowRowDelete = true;
if (Convert.ToUInt32(e.Row["id"]) > 3)
allowRowDelete = false;
}
方法中,如果验证失败,我拒绝删除:
RowDeleted
虽然这是这个问题的答案,但这不是我的优先解决方案,因为我最初想要使用外键约束,就像我现在必须做的其他posts一样。
其他一些帖子,有同样问题的人可能会觉得有趣:
http://www.pcreview.co.uk/threads/how-to-stop-a-change-in-the-rowdeleting-event-handler.1239208/
What is the "pressed the delete key" event for the WPF Datagrid?
http://www.experts-exchange.com/Programming/Languages/C_Sharp/Q_21758199.html