Blo*_*ard 41 c# attributes datagridview properties winforms
我有一个这样的课:
private class MyClass {
[DisplayName("Foo/Bar")]
public string FooBar { get; private set; }
public string Baz { get; private set; }
public bool Enabled;
}
Run Code Online (Sandbox Code Playgroud)
当我创建一个List<MyClass>并将其分配给DataSourcea时DataGridView,网格显示两列,"Foo/Bar"和"Baz".这就是我想要发生的事情.
它目前有效,因为Enabled是一个字段,而不是属性 - DataGridView只会获取属性.但是,这是一个肮脏的黑客.
我也想使Enabled成为一个属性,但仍然将它隐藏在DataGridView上.
我知道我可以在绑定后手动删除列..但这并不理想.
是否有类似于DisplayName的属性,我可以用?标记属性?有点像[Visible(false)]?
C-P*_*uru 72
[Browsable(false)]将隐藏一个属性DataGridView.
可视化设计器通常在"属性"窗口中显示那些没有可浏览属性或标记为BrowsableAttribute构造函数的可浏览参数设置为true的成员.可以在设计时修改这些成员.标有BrowsableAttribute构造函数的可浏览参数设置为false的成员不适合设计时编辑,因此不会显示在可视化设计器中.默认值为true.
Yoo*_*eek 10
我一直没有意识到System.ComponentModel装饰者属性如此,BrowsableAttribute并且它的亲属与除了绑定之外的任何东西都有关系PropertyGrid.(facepalm)我喜欢C-Pound Guru的方法,因为它可以让你保持GUI比我过去做的更松散耦合.
仅仅从不同的角度来看,我长期使用的方法是以编程方式或通过表单设计器预先定义DataGridView中的列.执行此操作时,您可以将每列设置DataPropertyName为属性的名称.唯一的技巧是您需要将DataGridView的AutoGenerateColumns属性设置为false,否则DGV将完全忽略您手动创建的列.请注意,无论出于何种原因,该AutoGenerateColumns属性都隐藏在表单设计器的属性网格中...不明白为什么.我看到这种方法的一个优点是你可以预先设置列格式等 - 你不必绑定然后调整列渲染/大小调整设置.
这是我的意思的一个例子:
_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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20194 次 |
| 最近记录: |