DataGrid异常处理

时间:2015-05-26 20:31:06

标签: c# wpf exception datagrid

我已经坚持了好几个小时,希望有人可以对此有所了解。假设我有一个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捕获这些异常?

1 个答案:

答案 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

http://wpf.codeplex.com/discussions/39077