在C#(。Net 2.0)的项目中,我使用了一个propertygrid。此属性网格显示通过SOAP从PHP后端检索的对象。某些对象包含字符串属性,其中空字符串的含义与字符串为NULL的含义不同。 SOAP调用返回的对象示例可能是:
SomeObject {
PropertyA = "Foo"
PropertyB = "Bar"
PropertyC = Null
}
只要我没有在PropertyGrid中“触摸”PropertyC,PropertyC的值将保持为null。当我输入“foobar”作为值然后清除PropertyCrid的PropertyC中的文本时,该值将等于一个空字符串。这对我来说很好;用户应该能够“输入”一个空字符串。但我也希望用户能够指定一个“空”值。
我设想的方式是用户可以右键单击属性的值,然后会弹出一个上下文菜单,其中“清除值”选项会将值设置为Null。
重要提示:我不想要使用“魔术值”,如 string “Null”或“Magix123”来指定值必须为null。当然,后端可以解释这些值并存储一个实际的null,但这个“解决方案”除了简单的脏之外,不需要,因为它需要在处理“魔术值”的地方更改大量代码。
理想情况下,PropertyGrid也会显示一个空值(“灰色”)“”,这样用户就可以看到空字符串和空值之间的差异。
任何人都知道如何处理这种情况? (.Net 2.0!)PropertyGrid允许我做这种东西吗?那我怎么去呢?我是否需要创建自己的从PropertyGrid派生的usercontrol,或者PropertyGrid是否有一些我错过的函数?
答案 0 :(得分:2)
向属性添加具有默认值null
的{{3}}应该在上下文菜单中启用命令Reset
。
要进一步自定义,您可能需要添加DefaultValueAttribute
并撰写自定义EditorAttribute
。