假设我有一个WinForms DataGridView控件,我将数据绑定到自定义类型的IList,如下所示:
public class Person { public string Name { get; set; } public int Age { get; set; } } private void Form1_Load(object sender, EventArgs e) { var data = new ArrayList(); data.Add(new Person("Bob", 25)); data.Add(new Person("Alice", 23)); this.dataGridView1.DataSource = data; }
这将显示列表项,列名称为"名称"和"年龄",从列表项的公共属性中巧妙地推断(通过反射).(根据我的测试,第一项.)
但是如果我使用DataTable做同样的事情:
DataTable dt = new DataTable(); dt.Columns.Add("Name"); dt.Columns.Add("Row"); dt.Rows.Add("Bob", 25); dt.Rows.Add("Alice", 23); this.dataGridView1.DataSource = dt;
... DataGridView如何知道如何使用DataTable的列而不是其公共属性?DataTable和DataRow似乎都没有实现提供此信息的任何接口.或者DataGridView是否了解DataTable类型,并以不同方式处理这种类型的数据源?
我问的原因是因为我想实现我自己的"动态"数据源类型,它不依赖于固定属性.