【问题标题】:Debugging Data Binding in Winforms C#?在 Winforms C# 中调试数据绑定?
【发布时间】:2010-12-30 10:14:14
【问题描述】:

我最近在一个正在处理数据绑定的项目中遇到了很多问题。当我即将显示某个在其控件内具有绑定的表单时,.Show 方法会引发有关绑定的异常 - “无法绑定到数据源上的属性或列。参数名称:dataMember。”。

现在,我很清楚这是一条相当笼统的错误消息,但我找不到合适的方法来获取有关哪个绑定失败、哪个控件、哪个数据源/成员等的任何信息。

有什么好办法找到这个吗?

【问题讨论】:

  • 错误消息不是那么通用,它告诉您查看数据源中在您的控件之一的 DataMember 属性中命名的列。您可能存在数据类型不匹配,或者可能只是在 DataMember 属性中拼写错误的列/属性。
  • 就是这样,我不确定我必须查看几十个绑定中的哪个,并且我没有关于错误的信息。
  • 您在哪里看到异常?你只是在更高的层次上抓住它吗?否则打开异常中断(见我的回答)。
  • 它会在 Form.Show() 调用中被抛出,即使启用了所有异常抛出,如前所述。正如最新回复中所说,删除表单/控件对 IEnumrable 的继承性“解决了”问题。我不需要继承,所以没关系,但是 BINDING 因为它而失败的事实很奇怪。

标签: c# winforms debugging data-binding


【解决方案1】:

我想一些通用的调试技巧会有所帮助:

调试时,是否有内部异常信息更多?

另一个提示是在堆栈跟踪窗口中打开“显示外部代码”。这将允许您进一步深入到 .Net Framework 代码本身的堆栈中。打开本地窗口以获取有关当前上下文内容的信息,这可能会导致您遇到问题。

同时确保为所有 CLR 异常开启“Break on exception”。

祝你好运。

【讨论】:

  • Break on exception 可能是这里的赢家,因为您将能够在 autos / locals 窗口中查看控件、数据源和数据成员
  • 抛出的 ArgumentException 没有内部异常或任何有用的信息。中断所有 CLR 异常已启用,并且似乎没有太大变化。如果“显示外部代码”选项尚未打开,我将尝试它。到目前为止,没有运气。
【解决方案2】:

好吧,我被难住了。表单中的控件之一是我制作的 UserControl,其中包含一些绑定。

这曾经工作得很好。现在,我已将 IEnumerable 的继承添加到我的控件中,因此它可以返回其中的某些对象,以获得我尝试添加的不同功能。现在,如果我“步入” .Show 调用,我会达到我在特定情况下所做的 IEnumrable 实现。

虽然此时它返回了一个空集合,但由于我没有要返回的元素,这显然导致了我因某种原因在 DataBinding 中得到的 ArgumentException。从我的控制中删除 IEnumrable 继承的那一刻,一切都恢复正常。

我完全不知道为什么会这样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    相关资源
    最近更新 更多