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

时间:2012-09-19 19:02:01

标签: c# entity-framework entity-framework-5

我正在学习实体框架(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();

        }
    }

4 个答案:

答案 0 :(得分:8)

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 documentation

答案 1 :(得分:0)

您必须使用dataGridView1.DataBind();

绑定数据
...
dataGridView1.DataSource = qLoggedIn.ToList();
dataGridView1.DataBind();
...

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

 IEnumerable<DataRow> query =( from p in orginalList.AsEnumerable()
                                    where p.Field<long>("Category") == 2
                                    select p).ToList();
                        DataTable boundTable = query.CopyToDataTable<DataRow>();

                        dataGridView1.AutoGenerateColumns = false;

                        dataGridView1.DataSource = boundTable;