数据绑定linq查询到Entity Framework 5.0中的datagridView

我正在学习entity framework(5.0和VSExpress 2012),我在将查询绑定到WinForms中的dataGridView时遇到了麻烦。 我有以下代码,当我启动应用程序时它显示我的查询,但我不知道在更改底层数据库中的数据后我需要做什么来更新dataGridView。 这样做的最佳方法是什么? 我在这做错了什么?

private void Form1_Load(object sender, EventArgs e) { using( var ctx = new TimeKeepEntities()) { var qLoggedIn = from r in ctx.tblTimeRecords where (r.tblEmployee.Active && !r.ClockOut.HasValue) || System.Data.Objects.EntityFunctions.DiffDays(r.ClockOut, DateTime.Now)<30 select new { Name = r.tblEmployee.Last + ", " + r.tblEmployee.First, r.tblProject.ProjName, r.ClockIn, r.ClockOut }; dataGridView1.DataSource = qLoggedIn.ToList(); } } 

Pho请注意他们使用的是winforms而不是asp.net。 根据MSDN,您可以执行以下操作:

 BindingSource bindingSource1 = new BindingSource(); bindingSource1.DataSource = (from r in ctx.tblTimeRecords where (r.tblEmployee.Active && !r.ClockOut.HasValue) || System.Data.Objects.EntityFunctions.DiffDays(r.ClockOut, DateTime.Now)<30 select new { Name = r.tblEmployee.Last + ", " + r.tblEmployee.First, r.tblProject.ProjName, r.ClockIn, r.ClockOut }).ToList(); dataGridView1.DataSource = bindingSource1; 

请参阅: msdn文档

您必须使用dataGridView1.DataBind();绑定数据dataGridView1.DataBind();

 ... dataGridView1.DataSource = qLoggedIn.ToList(); dataGridView1.DataBind(); ... 

.Net使用断开连接的模型。 从数据库中获取信息时,它是该时间点的快照。 如果更改基础数据存储中的数据,则除非您显式重新查询数据库并重新绑定UI,否则不会反映这些更改。

当您在UI中保存更改时,EF可以检查是否有其他人更改了您正在修改的行(针对并发问题),并让您知道是否存在潜在冲突。

  IEnumerable query =( from p in orginalList.AsEnumerable() where p.Field("Category") == 2 select p).ToList(); DataTable boundTable = query.CopyToDataTable(); dataGridView1.AutoGenerateColumns = false; dataGridView1.DataSource = boundTable;