在一个WinForm小程序中,有两处须要用DataGridView控件显示数据。设置DataGridView.DataSource为数据查询结果后,第一个DataGridView能够正常显示数据,而第二个DataGridView没有任何反应。小程序
具体代码以下:ide
OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=test.mdb;"); var commandText = "SELECT * FROM AAA"; var command = new OleDbCommand(commandText, connection); List<TesionData> tesionDatas = new List<TesionData>(); connection.Open(); OleDbDataReader reader = command.ExecuteReader(); while (reader.Read()) { var tesionData = new TesionData { ID = reader["aa"].ToString(), Beach = reader["bb"].ToString(), Hook = reader["cc"].ToString(), }; tesionDatas.Add(tesionData); } reader.Close(); connection.Close();
DataGridView1.DataSource = tesionDatas;
2. 第二个DataGridView代码部分spa
与第一个相比,数据读取部分相差不大,区别是分别从两个表中取得数据,而后用了Linq获得一个匿名类的listcode
var join = from s in sampleRegisters join t in tensionDatas on s.Beach equals t.Beach
select new { Beach = s.Beach, Hook = s.Hook, Beacht =t.Beach, Hookt = t.Hook };
DataGridView2.DataSource = join;
通过检查,join已经获得了正确的数据,这段代码没有什么运行时错误,可就是不能显示数据。orm
对比这两个过程,本质的区别就在赋值给DataSource的变量上,第一个是List<类名>,第二个是一个匿名类的List。blog
难道join没有被执行吗?改为以下代码,终于成功显示了相关数据,区别在高亮部分:io
var join = from s in sampleRegisters join t in tensionDatas on s.Beach equals t.Beach select new { Beach = s.Beach, Hook = s.Hook, Beacht =t.Beach, Hookt = t.Hook }; DataGridView2.DataSource = join.ToList();