捕获 DataGrid 视图错误

Posted

技术标签:

【中文标题】捕获 DataGrid 视图错误【英文标题】:Trapping DataGrid view Error 【发布时间】:2011-06-22 20:18:56 【问题描述】:

我的用户想要一种对我们的产品数据库进行大量上传/编辑的方法,就像他们使用 excel 一样,他们可以在电子表格中复制和粘贴。虽然这让我想一想,但我不是老板,所以它就是这样。我只是要将所有内容转储到数据网格视图并让他们在那里编辑它(呃)。虽然有很多东西需要特定的值(即大小),但我不希望它们输入 XL、XLarge、X-Large、xlarge,例如,它们都应该是 XLarge。所以我需要组合框。很简单,但他们也希望能够选择要显示的列,所以它不是一个静态表,我只能指定列类型。我设法动态地制作适当的列组合框列并用数据填充它们。我像这样填写它们:

for (int y = 0; y < table.Rows.Count; y++)

    viewMassEdit.Rows.Add();
    for (int x = 0; x < table.Columns.Count; x++)
        viewMassEdit.Rows[y].Cells[x].Value = table.Rows[y][x].ToString();

所有数据都正确填写。没有例外。这就是问题所在。这会创建一个大表,当我开始垂直或水平滚动时,这些未处理的错误消息会定期弹出:

它在说什么废话?当我把它放在那里时,它接受了很好的值,现在当我在表格中导航时有什么问题吗?此外,我该去哪里处理这个错误?

【问题讨论】:

【参考方案1】:

好吧,“处理”错误 - 向事件 DataGridView.DataError 添加处理程序:

void InitializeComponent() 
   // ... //

   this.DataGridView.DataError += this.DataGridView_DataError;


void DataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e) 
   e.ThrowException = false;

您可能想要调试该DataGridViewDataErrorEventArgs,并查看异常等是什么,以便您可以从一开始就阻止它触发。

【讨论】:

感谢您的回复,我的最后一句话可能误导了我。我不只是想“处理”该错误,尽管它似乎可以正常工作。我想照你说的做,防止它开火。不幸的是,所有 DataGridViewDataErrorEventArgs 告诉我的信息都与弹出的错误消息相同。 @Nick - 快速谷歌搜索似乎表明它是由绑定源中不存在的值引起的。我的猜测是您在源数据中有一个 DBNull,它设置为 string.Empty。错误弹出,可能默认为“小”或您的枚举值中的第一个。【参考方案2】:

要知道在哪里处理错误,请在 (Debug->Exceptions) 上使用 Break on Handled Exceptions 进行调试。这应该可以帮助您查明来源。

【讨论】:

我看不到这样的选项。如果有区别,我正在使用 VS2010。我尝试选中该框以在 System.ArgumentException 上中断,但没有帮助。 在例外菜单中,您应该看到两列复选框,Thrown 和 User Unhandled。默认情况下, throwed 为 false,unhandled 为 true。尝试检查所有 CLR 异常抛出。 不走运。我什至还检查了其他所有框,但它仍然显示错误消息并且没有中断。 我也没有为这些 DataGrid 默认错误配置“抛出时中断”。在 VS2015 中,我检查了“抛出时中断”下的“异常设置”中的所有内容。其他各种异常都会中断,但是当我收到 System.Data.InvalidContraintException (明确在列表中并检查过)时,我仍然会得到这个愚蠢的对话框并且没有断点。

以上是关于捕获 DataGrid 视图错误的主要内容,如果未能解决你的问题,请参考以下文章

拖动多个项目时,此视图不允许 DataGrid 'EditItem'

将按钮列添加到 datagrid 视图导致问题

在多线程环境中更新 DataGrid 视图

将 xml 文件加载到 Datagrid 视图并在更新后再次保存

easyUI 展开DataGrid里面的行显示详细信息

如何在 Visual Studio 2019 的 Datagrid 视图中连接 MySQL DataTable 中的两列?