使属性在 DataGridView 中可见,但在 PropertyGrid 中不可见
本文关键字:但在 PropertyGrid 属性 DataGridView | 更新日期: 2023-09-27 18:35:04
假设我有一个属性,我希望在 DataGridView 中显示该属性,但当相同的对象显示在 PropertyGrid 中时则不显示。 我知道我可以使用[Browsable(false)]
,但这在两个视图中都隐藏了它。 我也可以做一个gridView.Columns["blah"].Visible = false;
,但这与我想要的相反,因为它隐藏在 DataGridView 中,但不隐藏在 PropertyGrid 中。 有没有办法反其道而行之? (除了创建一个全新的 DataTable 只是为了保存相同的数据减去一个字段,并将所有内容重新绑定到该字段之外 - 这确实是一种笨拙的做事方式。 或者,我可以接受一个解决方案,该解决方案将一列添加到 DataGridView 中,该列在实际类中不存在。
可以使用
PropertyGrid 的 BrowsableAttributes 属性来解决此问题。首先,创建一个新属性,如下所示:
public class PropertyGridBrowsableAttribute : Attribute
{
private bool browsable;
public PropertyGridBrowsableAttribute(bool browsable){
this.browsable = browsable;
}
}
然后将此属性添加到要在 PropertyGrid 中显示的所有属性中:
[DisplayName("First Name"), Category("Names"), PropertyGridBrowsable(true)]
public string FirstName {
get { return ... }
set { ... }
}
然后设置"可浏览属性"属性,如下所示:
myPropertyGrid.BrowsableAttributes = new AttributeCollection(
new Attribute[] { new PropertyGridBrowsableAttribute(true) });
这将仅显示属性网格中的特性化属性,并且 DataGridView 仍可以通过多一点编码工作来访问所有属性。
我仍然会使用 Tergiver 并将这种行为称为错误,因为可浏览属性的文档清楚地说明了它仅用于属性窗口。
(功劳归用户"maro"http://www.mycsharp.de/wbb2/thread.php?postid=234565(