6

私は 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();

        }
    }
4

4 に答える 4

11

Pho は、asp.net ではなく winforms を使用していることに注意してください。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

.Net は切断されたモデルを使用します。データベースから情報を取得すると、その時点でのスナップショットになります。基になるデータ ストアのデータを変更した場合、明示的にデータベースを再クエリして UI を再バインドしない限り、それらの変更は反映されません。

UI で変更を保存すると、EF は、変更中の行を他のユーザーが変更したかどうかを確認し (同時実行の問題のため)、競合の可能性があるかどうかを通知します。

于 2012-09-19T20:49:26.130 に答える
0

次のようにデータをバインドする必要がありますdataGridView1.DataBind();

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