2008-12-17 78 views
13

我目前使用winforms数据绑定来连接数据编辑表单。我通过CodeSmith使用netTiers框架来生成我的数据对象。对于允许空值的数据库字段,它会创建可为空的类型。我发现使用winforms数据绑定控件不会正确绑定到可空类型。将Winforms控件绑定到可空类型的最佳方法?

我在网上看到的解决方案建议人们创建新的文本框类,可以处理可空类型,但这可能是一个痛苦,必须换出我已经创建的窗体上的文本框。

最初我认为使用扩展方法来实现它会很好。基本上为文本框类创建一个扩展属性并绑定到该属性。从我有限的扩展方法经验和做一些网上检查看起来你不能做一个扩展属性。据我所知,绑定必须通过一个属性,因为它需要能够获取或设置值,因此扩展方法不起作用。

我很想找到一种干净的方式来使用扩展方法来改造这些表单,但如果我必须创建新的文本框和组合框控件,那就是我要做的。

我的项目是目前仅限于NET 2.0由于要求在Windows 2000

任何建议运行?

回答

31

在上面的海报中引用的文章的注释部分来了一个简单的解决方案。

,而不是与结合:

textBox1.DataBindings.Add("Text", myClass, "MyTextProperty"); 

绑定:

textBox1.DataBindings.Add("Text", myClass, "MyTextProperty", true, DataSourceUpdateMode.OnPropertyChanged, string.Empty); 
1

哦,讨厌...我只能想到一些方法来实现这一点,他们都不是我所说的理想。

  • 第一个是为您的数据对象编写一个包含可将所有空字符串转换为空字符串的空字符的包装器。绑定到你的包装器对象。

  • 二是要确保在你的数据库中的所有值不为空......再次,不理想

  • 你已经决定第三是不可行的在这种情况下是你创建一个扩展文本框的自定义对象以添加可绑定到可空对象的属性。

  • 我能想到的第四种最理想的方式似乎是不可能的。创建一个扩展属性,它允许你扩展所有的文本框对象并绑定到这个对象 - 但是目前看起来扩展属性是不可能的。看起来好像这种情况下这种类型的功能在.NET框架中特别有用。

5

我刚刚偶然发现了这个问题,我真的很头疼。

绑定可空类型的有趣之处在于DataGridView可以毫无问题地处理它们 - 这只是导致问题的文本框。

这是非常讨厌的 - 它甚至似乎阻止关闭窗体,当你在文本框中有一个空值,并且它看起来你也不能摆脱它。

所以,这不是一个很好的答案,但我的建议是尝试坚持datagridviews为窗体上的可空类型。

另一个建议是使用如建议在这里,虽然我没有测试它又一个“扩展提供者:

编辑:现在已经下载了这个页面上的示例代码和它出色的作品。

http://www.thejoyofcode.com/Databinding_and_Nullable_types_in_WinForms.NET.aspx

+0

链接不工作了。 – AlexP11223 2014-04-28 04:48:34

相关问题