是否有一个属性,我可以在我的课中使用,告诉DataGridView不要创build一个列时绑定到List <MyClass>

我有这样的一个class级:

private class MyClass { [DisplayName("Foo/Bar")] public string FooBar { get; private set; } public string Baz { get; private set; } public bool Enabled; } 

当我创build一个List<MyClass>并将其分配给DataGridViewDataSource时,网格会显示两列“Foo / Bar”和“Baz”。 这就是我想要发生的事情。

它目前的作品,因为Enabled是一个字段,而不是一个属性 – DataGridView将只会select属性。 但是,这是一个肮脏的黑客。

我想使启用一个属性,但仍然隐藏在DataGridView。

我知道我可以手动删除绑定后的列..但是这并不理想。

是否有一个类似于DisplayName的属性,我可以标记一个属性? 像[Visible(false)]

[Browsable(false)]将从DataGridView隐藏一个属性。

可视化devise器通常在“属性”窗口中显示那些没有可浏览属性的成员,或者用BrowsableAttribute构造函数的可浏览参数设置为true标记的成员。 这些成员可以在devise时进行修改。 标记为BrowsableAttribute构造函数的browsable参数设置为false的成员不适合devise时编辑,因此不会显示在可视化devise器中。 默认值是true。

我一直很幸福不知道像BrowsableAttribute这样的System.ComponentModel装饰器属性和它的亲属除了绑定到一个PropertyGrid之外都与其他东西有关。 ( facepalm )我喜欢C-Pound Guru的方法,因为它允许你保持你的GUI比我过去做的更松散的耦合。

仅仅从不同的angular度来看,我已经使用了很长时间的方法是预先在DataGridView中定义列,以编程方式或通过表单devise器。 当你这样做,你可以设置每个列的DataPropertyName为您的属性的名称。 唯一的技巧是你需要将DataGridView的AutoGenerateColumns属性设置为false,否则DGV将完全忽略手动创build的列。 请注意,无论出于何种原因, AutoGenerateColumns属性对于表单devise器的属性网格是隐藏的…不知道为什么 。 我看到这种方法的一个优点是,您可以预先设置列格式等 – 你不必绑定,然后去调整列渲染/大小设置。

这里是我的意思的一个例子:

 _DGV.AutoGenerateColumns = false; DataGridViewTextBoxColumn textColumn = new DataGridViewTextBoxColumn(); textColumn.DataPropertyName = "FooBar"; textColumn.HeaderText = "Foo/Bar"; // may not need to do this with your DisplayNameAttribute _DGV.Columns.Add(textColumn); textColumn = new DataGridViewTextBoxColumn(); textColumn.DataPropertyName = "Baz"; List<MyClass> data = GetMyData(); _DGV.DataSource = data; 

使用[Display(AutoGenerateField = false)]来隐藏你不想要的属性。