2008-12-17 27 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

相關問題