在一個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();