質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

LINQ to SQL

LINQ to SQLは.NET Framework 3.5のコンポーネントで、リレーショナル データをオブジェクトとして管理するためのランタイム インフラストラクチャを提供します。

Q&A

解決済

2回答

2797閲覧

Visual C# LINQ でレコード登録後、コンボボックスに最新のデータが反映されない

Web_akira

総合スコア34

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

LINQ to SQL

LINQ to SQLは.NET Framework 3.5のコンポーネントで、リレーショナル データをオブジェクトとして管理するためのランタイム インフラストラクチャを提供します。

0グッド

0クリップ

投稿2018/06/14 00:57

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(); を実行していますが
参照ロックなどがかかってしまっているのでしょうか…。

まだ調査中ですが、すぐに原因が分かる方がいらっしゃいましたら、ご教授下さい。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2018/06/14 02:03

どちらかいうと取得側の問題だと思いますので、取得側(MKClass.GetAllMK().ToList()?)のコードを追記されては。
guest

回答2

0

自己解決

自己解決できました。
データソースを取得する処理ですが、何らかのツールを使ってテーブルすべてに
共通化された処理が作成されていました。この共通処理で、一度取得したら再取得はしないようになっていました。

LINQで通常のSELECTを発行し、結果をデータソースに挿入したところ解決しました。
マスタを変更しないという想定でおそらく作られていたのだと思います。
前任者の引継ぎで保守作業をしているため、分からない部分が多々ある状況です…。
お騒がせしました。
コメントを頂いた方、ありがとうございました。

投稿2018/06/14 02:04

Web_akira

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

this.cmbSearchKkomoku.DataSourceは再表示時にどうのように更新しているのでしょうか?

投稿2018/06/14 01:46

編集2018/06/14 01:46
takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問