2010-06-22 101 views
2

在C#(.Net 2.0)中的項目中,我使用了一個propertygrid。該propertygrid顯示通過SOAP從PHP後端檢索的對象。一些對象包含字符串屬性,其中空字符串的含義與NULL的字符串的含義相比是不同的。通過SOAP調用返回的對象的一個​​例子可能是:C#Propertygrid屬性可爲空

SomeObject { 
    PropertyA = "Foo" 
    PropertyB = "Bar" 
    PropertyC = Null 
} 

只要我不PropertyGrid中的「觸摸」 PropertyC,PropertyC的值將保持爲空。當我輸入「foobar」作爲值,然後清除屬性網格中PropertyC的文本時,該值將等於一個空字符串。這對我來說很好;用戶應該能夠「輸入」一個空字符串。但我也希望用戶能夠指定一個「空」值。

我設想的方式是,用戶可以右鍵單擊屬性的值,上下文菜單將彈出一個「清除值」選項,將值設置爲空。

重要:我做想用「神奇值」之類的字符串「空」或「Magix123」指定的值必須爲空。當然,後端可以解釋這些值並存儲一個實際的空值,但這個「解決方案」除了普通的骯髒外,並不需要,因爲它需要在處理「魔法值」的地方改變很多代碼。

理想情況下,PropertyGrid也會顯示爲空值(「灰色」)「」,以便用戶可以看到空字符串和空值之間的差異。

任何人都有如何處理這種情況的想法? (.Net 2.0!)PropertyGrid允許我做這種事情嗎?那我該怎麼去解決呢?我是否需要創建自己的從PropertyGrid派生的usercontrol或者PropertyGrid是否有一些我錯過的函數?

回答

2

將缺省值爲nullDefaultValueAttribute添加到屬性應在上下文菜單中啓用命令Reset。 如需進一步定製,您可能需要添加EditorAttribute並編寫自定義UITypeEditor

+0

你一定是在開玩笑吧。那很簡單? Jeeeeeez ...大聲笑 我會去檢查出來,讓你知道。謝謝! – RobIII 2010-06-22 12:18:42

+0

至少在理論上它應該那麼容易。有許多功能和魔法集成在許多控件中。 – 2010-06-22 12:25:29

+0

嗯,我已經將[DefaultValue(null)]添加到Reference.cs文件中的屬性,但「重置」命令不可用。也許我在這裏做錯了什麼。我正在努力...任何幫助/技巧值得讚賞。 另外;我將不得不弄清楚如何在References.cs之外的其他位置應用這些更改,因爲在更新Web引用時,此文件將始終被覆蓋(重新處理)。我猜部分班是要走的路? – RobIII 2010-06-22 13:13:14