我目前正在使用winforms数据绑定来连接数据编辑表单.我通过CodeSmith使用netTiers框架来生成我的数据对象.对于允许空值的数据库字段,它会创建可空类型.我发现使用winforms数据绑定控件将无法正确绑定到可空类型.
我在网上看过一些解决方案,建议人们创建可以处理可空类型的新文本框类,但是在我已经创建的表单上交换文本框可能会很麻烦.
最初我认为使用扩展方法来做这件事会很棒.基本上为textbox类创建扩展属性并绑定到该属性.从我有限的扩展方法经验和在网上做一些检查看起来你不能做扩展属性.据我所知,绑定必须通过属性,因为它需要能够获取或设置值,因此扩展方法不起作用.
我很想找到一种干净的方法来使用扩展方法来改造这些表单但是如果我必须创建新的文本框和组合框控件那就是我要做的.
由于需要在Windows 2000上运行,我的项目目前仅限于.Net 2.0.
有什么建议?
在上面引用的文章的评论部分中,其中一个海报提出了一个简单的解决方案.
而不是绑定:
textBox1.DataBindings.Add("Text", myClass, "MyTextProperty");
绑定:
textBox1.DataBindings.Add("Text", myClass, "MyTextProperty", true, DataSourceUpdateMode.OnPropertyChanged, string.Empty);
我自己偶然发现了这个问题,这真是令人头疼.
绑定可空类型的有趣之处在于DataGridView可以毫无问题地处理它们 - 它只是导致问题的文本框.
它非常讨厌 - 当文本框中有一个空值时,它甚至可能会阻止关闭表单,而且看起来你也无法远离它.
所以,这不是一个很好的答案,但我的建议是尝试坚持表格中可空类型的datagridviews.
另一个建议是使用此处建议的"扩展程序提供程序",但我还没有测试过:
编辑:现在已经下载了此页面上的示例代码,它的工作原理是BRILLIANTLY.
http://www.thejoyofcode.com/Databinding_and_Nullable_types_in_WinForms.NET.aspx