6

假设我有一个想要在 DataGridView 中显示的属性,但在 PropertyGrid 中显示同一对象时却没有。我知道我可以使用[Browsable(false)],但这在两个视图中都隐藏了它。我也可以做一个gridView.Columns["blah"].Visible = false;,但这与我想要的相反,因为它隐藏在 DataGridView 中而不是 PropertyGrid 中。有什么办法可以逆转吗?(创建一个全新的 DataTable 只是为了保存相同的数据减去一个字段,而是将所有内容重新绑定到该数据表 - 这确实是一种做事的方式。)或者,我可以接受一个向 DataGridView 添加一列的解决方案这在实际课程中不存在。

4

1 回答 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 回答