是否有一个属性,我可以在我的课中使用,告诉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>
并将其分配给DataGridView
的DataSource
时,网格会显示两列“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)]
来隐藏你不想要的属性。