假设我有一个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;
}
Run Code Online (Sandbox Code Playgroud)
这将显示列表项,列名称为"名称"和"年龄",从列表项的公共属性中巧妙地推断(通过反射).(根据我的测试,第一项.)
但是如果我使用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;
Run Code Online (Sandbox Code Playgroud)
... DataGridView如何知道如何使用DataTable的列而不是其公共属性?DataTable和DataRow似乎都没有实现提供此信息的任何接口.或者DataGridView是否了解DataTable类型,并以不同方式处理这种类型的数据源?
我问的原因是因为我想实现我自己的"动态"数据源类型,它不依赖于固定属性.