数据绑定异常无法将值格式化为难以调试的所需类型

Cod*_*eld 1 .net data-binding devexpress exception winforms

我们在winforms应用程序中使用了大量的数据绑定,最近我们遇到了一些难以调试的场景.

在我们的BindingSource上调用ResumeBinding()时,我们收到一个异常:

ex.Type FormatException ex.Message无法将值格式化为所需类型:

在System.Windows.Forms.Binding.FormatObject(对象的值)在System.Windows.Forms.Binding.PullData(布尔重新格式化,布尔力)在System.Windows.Forms.BindingManagerBase.PullData(布尔&成功)在System.Windows. Forms.CurrencyManager.CurrencyManager_PullData()在System.Windows.Forms.CurrencyManager.EndCurrentEdit()在System.Windows.Forms.CurrencyManager.ChangeRecordState(的Int32在newPosition,布尔验证,布尔endCurrentEdit,布尔firePositionChange,布尔pullData)在System.Windows. Forms.CurrencyManager.UpdateIsBinding(布尔raiseItemChangedEvent)在System.Windows.Forms.CurrencyManager.UpdateIsBinding()在System.Windows.Forms.CurrencyManager.ResumeBinding()在System.Windows.Forms.BindingSource.ResumeBinding()在SomeProject.SomePanel. C:\ SomeDir\SomePanel.cs中的FlightData_DataReady():第94行

我们使用的是具有一些Nullable属性的简单对象模型.然而,并非所有人都试图捕捉塞特尔人/吸气者

我们正在使用DevExpress组件,在将属性更改为Nullable属性并将NullText属性添加到DevExpress文本框之后,会启动此特殊异常.

任何人都可以了解如何调试这种情况?


在解决了这个问题后,我注意到一些细节造成了这个问题.

其中一个Nullable双属性被绑定到具有Single属性的控件.数据绑定引擎抛出了一些关于无法将Nullable double转换为Single的第一个更改异常.

调试这个并找出哪个控件/属性应该被责备仍然是不可能的,任何人都有一些线索如何做到这一点?

Mar*_*tin 13

尝试启用格式化

this.myTextBox1.DataBindings.Add(new System.Windows.Forms.Binding("EditValue", this.bindingSource1, "MyProperty", true));
Run Code Online (Sandbox Code Playgroud)

注意真参数

将此属性设置为true还会启用错误处理行为并导致引发BindingComplete事件.通过检查BindingCompleteEventArgs参数的BindingCompleteState属性,此事件的处理程序可以基于绑定过程中的成功,错误或异常采取适当的操作.

http://msdn.microsoft.com/en-us/library/system.windows.forms.binding.formattingenabled.aspx

  • 我没有足够的声誉来贬低这个答案.你错过了这个问题.我和OP有同样的问题.我有一个包含数十个数据绑定字段的表单.突然间,我看到了这个问题,我无法分辨哪个领域失败了.问题是如何确定哪个字段失败.这是一个糟糕的错误信息.异常的堆栈跟踪不包含有用的上下文. (2认同)
  • Downvote:是不是有点苛刻?也许你应该花时间阅读MSDN文章.它包括错误处理的一部分,由于真实参数,这是可能的. (2认同)
  • @Dan - 意外地将我的回复留给了你作为答案.由于它与当时的DevExpress控件有关,建议的答案没有帮助.问题是你可以在任何地方进行调试,而不必改变数百(或数千)行代码.我发现答案是否定的. (2认同)