【发布时间】:2015-08-08 16:54:30
【问题描述】:
我已经坚持了几个小时,希望有人能对此有所了解。假设我有一个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 表的属性。
现在,当用户从该表中删除一行时,我想在允许或拒绝删除之前执行一些检查。
我所做的是订阅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 捕获这些异常?
【问题讨论】:
-
简单的答案是你不能轻易抓住它。因此,从 C# 中的事件处理程序中抛出异常通常不是一个好主意。相反,只需将删除结果提供给自定义 EventArgs 类,或根据需要引发 DeleteSucceeded / DeleteFailed 事件。
-
@Octopoid:不完全确定您提出的解决方案是什么意思,但您的声明让我走上了正确的轨道,以避免在事件处理程序中引发异常。我想我现在有一个解决方案,将对其进行测试并将其作为答案,如果它有效。谢谢!