【问题标题】:Where to catch unhandled exception when editing datagridview编辑 datagridview 时在哪里捕获未处理的异常
【发布时间】:2024-04-28 12:35:02
【问题描述】:

我有一个数据网格视图,它数据绑定到实体框架“表”:

    public ObjectSet<TEntity> tableData { get; private set; }
    private BindingSource tableBinding;

    public AuxiliaryTableEditor(ObjectSet<TEntity> something)
    {
        InitializeComponent();

        this.tableData = something;
        this.tableBinding = new BindingSource();
        this.tableBinding.DataSource = tableData;

        this.auxiliaryTableEditorGridView.DataSource = tableBinding;
    }

这很好用。

问题是这样的:如果用户开始编辑/添加一行,如果他们在一个单元格中进入编辑模式,删除内容,然后 Tab 或点击它,一个 unhandled 异常将被抛出(因为大多数 db 列不允许空值)。这是完全正常且可以接受的,但我希望能够捕获和处理这些异常,并且我不知道在哪里/如何捕获它们

我尝试在 datagridview 上使用几个不同的事件处理程序,例如.DataError.RowValidating,以及一些我现在不记得的其他事件...但我似乎无法捕捉到讨厌的异常.

非常感谢任何建议!

编辑:我应该补充一点,异常通常是这样的:“用户代码未处理 ConstraintException。此属性不能设置为空值”。

【问题讨论】:

  • 查看堆栈跟踪?
  • @Erix 堆栈跟踪是否与调用堆栈相同?因为调用堆栈并没有真正告诉我太多......只是出现未处理错误的行(在designer.cs文件中)
  • 是的,有时它可以帮助您找到捕捉它的地方。但并非总是如此。

标签: c# entity-framework data-binding exception-handling datagridview


【解决方案1】:

试试CellEditEndingCurrentCellChanged 事件。

编辑:或者你也可以让你的属性的设置器处理空值..

public int Number
{
  get { return _number; }
  set
  {  
      if (null == value)
      {
          // handle here
      }
  }
}

编辑:请参阅Entity Framework error when submitting empty fields 了解更多信息。

【讨论】:

  • 如何检查是否在 cellEdit / Changed 上引发了约束异常?我尝试添加这个,但仍然不确定如何捕获异常...
  • 您的编辑:我没有使用我自己的属性,我让实体框架处理所有事情......我想我的一半问题是我不完全理解正在发生的魔法EF 幕后...
  • 没有意识到您直接绑定到 EF.. 看看这个答案:*.com/questions/1777815/…
  • 啊哈,正是我想要的!已将您的答案标记为正确,但您可以将该链接添加为答案的一部分吗?谢谢! =)
  • @JamesEkema 添加了链接。看起来您可能需要在您的应用程序中添加一个模型层。