一定間隔でグリッドの内容を再表示するときの落とし穴
バインドしているのにデータグリッドの内容が変化しない!なぜ?という状況に遭遇したので
その時のことを書いてます。 一定間隔でDBからデータを取得し画面のデータグリッドに描画するモニタ機能の話です。 ソースは再現できるよう簡単にまとめてます。まずはソースを説明します。 Form1にはdataGridView1を配置して_dt1にDataTableオブジェクトを生成しデータを格納します。 dataGridView1は_dt1をバインドして、画面上にデータが表示されます。ここまではOK。 button1をクリックするとdt2にDataTableオブジェクトを生成しデータを格納します。 _dt1 = dt2でデータを書き込み(ここが間違い><) 書き込みしたと思っているのでdt2の内容が画面に反映されると期待してますが、 画面は変化なし!!よく考えたら画面が変化しないのは当然だ・・・ ①DataTable _dt1 = new DataTable(); ②dataGridView1.DataSource = _dt1; ①でメモリ上にオブジェクト1を生成し、オブジェクト1へ参照できるように_dt1と紐づけます。 ②は画面に表示するオブジェクトを紐づけています。 ①DataTable dt2 = new DataTable(); ②_dt1 = dt2; ①でメモリ上にオブジェクト2を生成し、オブジェクト2へ参照できるようにdt2と紐づけます。 ②では_dt1をオブジェクト2へ参照するように向きを変えてます。 ですが!dataGridView1はオブジェクト1を参照しているので画面上の表示は変わりません。 挿絵を見ると当たり前だとすぐ分かるのですが、プログラム上だと気づくのに時間が… そのときのソースコードです。 テストコード
|
|