使属性在 DataGridView 中可见,但在 PropertyGrid 中不可见

本文关键字:但在 PropertyGrid 属性 DataGridView | 更新日期: 2023-09-27 18:35:04

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

使属性在 DataGridView 中可见,但在 PropertyGrid 中不可见

可以使用

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(

相关文章: