6

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

4 回答 4

11

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 文档

于 2012-09-19T20:16:55.517 回答
0

您必须将数据绑定到dataGridView1.DataBind();

...
dataGridView1.DataSource = qLoggedIn.ToList();
dataGridView1.DataBind();
...
于 2012-09-19T19:20:09.480 回答
0

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

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

于 2012-09-19T20:49:26.130 回答
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;
于 2015-11-01T10:29:55.323 回答