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(); }