C# PropertyGrid属性可为空。

3
在一个C# (.Net 2.0)项目中,我使用了一个属性网格(propertygrid)。这个属性网格显示从PHP后端通过SOAP检索到的对象。一些对象包含字符串属性,其中空字符串的含义与NULL的字符串不同。一个由SOAP调用返回的对象的例子可能是:
SomeObject {
  PropertyA = "Foo"
  PropertyB = "Bar"
  PropertyC = Null
}

只要我不在PropertyGrid中“触摸”PropertyC,PropertyC的值将保持为null。当我将“foobar”输入值并清除PropertyC的属性网格中的文本时,该值将等于空字符串。这对我来说都很好; 用户应该能够“输入”空字符串。但我也希望用户能够指定一个“null”值。
我设想的方法是,用户可以右键单击属性值,然后弹出上下文菜单,其中包含“清除值”选项,该选项将设置值为空。
重要提示:我不想使用“神奇值”(如“Null”或“Magix123”)来指定需要为null的值。当然,后端可以解释这些值并存储实际的null,但这种“解决方案”除了变得非常混乱之外,还不受欢迎,因为它需要更改处理“神奇值”的所有代码。
理想情况下,属性网格还将显示为灰色的null值,以便用户可以看到空字符串和Null值之间的区别。
有没有人对如何处理这种情况有什么想法? (.Net 2.0!)属性网格是否允许我执行此类操作?如果是这样,我该如何处理?我需要创建一个派生自PropertyGrid的自定义用户控件吗?还是属性网格有我错过的某些功能?
1个回答

3

你在开玩笑吧,这么简单?天啊...哈哈哈我会去检查一下并让你知道。谢谢! - RobIII
至少在理论上,这应该很容易。许多控件中集成了大量的功能和魔法。 - Daniel Brückner
嗯,我在Reference.cs文件中的一个属性上添加了[DefaultValue(null)],但是“reset”命令不可用。也许我在这里做错了什么。我正在努力解决...任何帮助/提示都将不胜感激。另外,我将不得不想办法在除References.cs之外的其他地方应用这些更改,因为在更新Web引用时,该文件将始终被覆盖(重新生成)。我猜Partial类是正确的方法? - RobIII
你是对的 - 它与标准的 PropertyGrid 不兼容。它只与 WinForms 设计器的属性网格开箱即用,因为他们以这种方式扩展了它。但是,将此功能添加到自定义属性网格非常容易。 - Daniel Brückner
嗯,我可能误解了你的意思,但是在我的项目中,我确实使用了一个“标准”的属性网格(只需将其拖放到WinForms项目中的一个窗体上)。 - RobIII
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接