Visual C# を始めて1週間ほどの初心者です。
あるマスタテーブルを登録、更新する管理画面を作りました。
こちらの管理画面上では、登録を確認できるのですが、
別の画面でマスタテーブルをデータソースにし、
コンボボックスの一覧にした時、最新のデータがとれずに困っています。
デバッグモードで確認しています。
データ登録後、終了し、再度立ち上げるとコンボボックスにも反映されています。
コンボボックスのソースは以下の通りです。
csharp
1var lstInputMK = MKClass.GetAllMK().ToList(); 2this.cmbSearchKkomoku.DataSource = lstInputMK; 3this.cmbSearchKkomoku.ValueMember = "No"; 4this.cmbSearchKkomoku.DisplayMember = "Name";
マスタ管理画面ではLINQを使って処理を書いています。
csharp
1// 登録する項目を設定 2MK addData = new MK 3{ 4 No = NoMax, 5 Name = MKname, 6 UpdateTime = DateTime.Parse(DateTime.Now.ToString("yyyy/MM/dd HH: mm:ss.fff")) 7}; 8 9// 登録実行 10db.MK.InsertOnSubmit(addData); 11 12// データベースへ変更内容を送信 13db.SubmitChanges(); 14db.Transaction.Commit();
DataGridView を使ってレコード一覧を表示しています。
登録後、再表示しており、マスタ画面では反映を完了できます。
A5M2というソフトでデータベースを直接見に行っても、反映は確認できます。
LINQの遅延処理などが関係しているのでしょうか?
データソースに格納する際、.ToList() が余計なのかと思って外してみましたが変わりません…。
あと、マスタのテーブルなので、排他ロックをかけています。
csharp
1db.ExecuteQuery<MK> (@"SELECT * FROM MK WITH(TABLOCKX)", "").ToList();
finally で db.Transaction = null; db.Connection.Close(); を実行していますが
参照ロックなどがかかってしまっているのでしょうか…。
まだ調査中ですが、すぐに原因が分かる方がいらっしゃいましたら、ご教授下さい。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー