Winform DataGridView数据绑定到复杂类型/嵌套属性
我试图将DataGridView
数据绑定到包含具有以下结构的类的列表:
MyClass.SubClass.Property
当我单步执行代码时,从不请求SubClass
。
我没有得到任何错误,只是没有看到任何数据。
请注意,我可以在具有相同层次结构的编辑表单中进行数据绑定。
得墨忒耳定律 。
在MyClass上创建一个公开SubClass.Property的属性。 像这样:
public class MyClass { private SubClass _mySubClass; public MyClass(SubClass subClass) { _mySubClass = subClass; } public PropertyType Property { get { return _subClass.Property;} } }
您可以向DataBindingComplete事件添加处理程序并在那里填充嵌套类型。 像这样的东西:
在form_load中:
dataGridView.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridView_DataBindingComplete);
稍后在代码中:
void dataGridView_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) { foreach (DataGridViewRow row in dataGridView.Rows) { string consumerName = null; consumerName = ((Operations.Anomaly)row.DataBoundItem).Consumer.Name; row.Cells["Name"].Value = consumerName; } }
这不好,但有效。
您无法将DataGridView绑定到嵌套属性。 这不被允许。
一种解决方案是将此ObjectBindingSource用作数据源。
你也可以使用Linq!
获取通用列表并使用.select选择下面的示例字段:
var list = (your generic list).Select(i => new { i.idnfe, i.ide.cnf }).ToArray(); if (list .Length > 0) { grid1.AutoGenerateColumns = false; grid1.ColumnCount = 2; grid1.Columns[0].Name = "Id"; grid1.Columns[0].DataPropertyName = "idnfe"; grid1.Columns[1].Name = "NumNfe"; grid1.Columns[1].DataPropertyName = "cnf"; grid1.DataSource = lista; grid1.Refresh(); }