假设我有一个想要在 DataGridView 中显示的属性,但在 PropertyGrid 中显示同一对象时却没有。我知道我可以使用[Browsable(false)]
,但这在两个视图中都隐藏了它。我也可以做一个gridView.Columns["blah"].Visible = false;
,但这与我想要的相反,因为它隐藏在 DataGridView 中而不是 PropertyGrid 中。有什么办法可以逆转吗?(创建一个全新的 DataTable 只是为了保存相同的数据减去一个字段,而是将所有内容重新绑定到该数据表 - 这确实是一种做事的方式。)或者,我可以接受一个向 DataGridView 添加一列的解决方案这在实际课程中不存在。
问问题
2421 次
1 回答
6
可以通过使用 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 { ... }
}
然后像这样设置 BrowsableAttributes 属性:
myPropertyGrid.BrowsableAttributes = new AttributeCollection(
new Attribute[] { new PropertyGridBrowsableAttribute(true) });
这只会在您的属性网格中显示属性属性,并且 DataGridView 仍然可以访问所有属性,只需更多的编码工作。
我仍然会选择 Tergiver 并将这种行为称为错误,因为 Browsable 属性的文档清楚地说明了它仅用于属性窗口。
(归功于http://www.mycsharp.de/wbb2/thread.php?postid=234565上的用户“maro” )
于 2012-08-31T15:05:24.107 回答