DataGridViewを更新してみる。(.Net Framework 2.0向け)

Windows Formプログラムを行っていく上で、非常に使い勝手のいいコンポーネントに「DataGridView」があります。
表示を行ったり、こっそりデータをリストの中に隠したりと色々できるコンポーネントですが、思いの外このコンポーネントに関する技術的な情報って少ない気がします。
なので、意外に重要なんだけどほとんど語られていないDataGridViewのデータの更新について書いてみたいと思います。

まずはじめに、DataGridViewは、自動更新してくれませんということを念頭に置いておきましょう。
VSのデザイナーで設定すると、あとは勝手にやってくれるものだと思い込んじゃいますが、違うので注意です。
実際、僕がそうでした(苦笑)。

では、データ更新を行うときは、どのようなコードを書く必要があるのかというと、以下のような複数の方法があります。

  • DataGridViewに直接データを格納する方法
  • DataTableをDataGridViewのDataSourceに割り当てる方法
  • DataGridViewの中身を一つずつ作る方法

1番目はDataGirdViewDataSourceDataTableをバインドさせながらデータを格納する方法です。
この場合は、あらかじめ定義しているテーブルアダプタのFillメソッドを呼び出します。このときのパラメータはDataSetに含まれる割り当てたいDataです。

// DBから取得したデータをDataGridViewに割り当てる。
DataGridView1.DataSource = TableAdapter.Fill(DataSet.Data);

次にDataTableDataGirdViewDataSourceに割り当てる方法です。

// DataTableをDataGridViewに割り当てる。
DataGridView1.DataSource = data;
// DBからデータを取得
DataSet.DataTable data = TableAdapter.GetData();

結構単純なコードなんですが、TableAdapterで定義したクエリからDataTableに格納します。

そこで取得したデータをDataGridViewDataSourceにバインドさせるだけです。そんなに難しいことではありません。

めんどくさいと思ってしまうのは、最後に紹介する一からDataGridView用にデータを作った場合です。

この場合、かなり手間が掛かりますが、作りが理解できると個人的にカスタマイズできたりするので、結構重宝すると思います。

DataGridViewRow addrow = new DataGridViewRow();
addrow.CreateCells(DataGridView1);
addrow.Cells[0].Value = "名前";
addrow.Cells[1].Value = "年齢";
addrow.Cells[2].Value = "住所";
addrow.Cells[3].Value = "性別";
DataGridView1.Rows.Add(addrow);    // データ追加

DataGridViewのデータを1から作る場合は、まずはじめにDataGridView列定義をしておかないと話になりませんので、予め作成してください。

そのあとに、DataGridViewRowクラスを定義すると、列データを作成できるようになります。

次にDataGridViewRow.CreateCellsメソッドで列の初期化をします。パラメータは作成してあるDataGridViewです。

渡されたパラメータの列に合わせて、DataGridViewRow.CreateCellsメソッドは列データを作成します。

この後は、各セルのデータに代入してからDataGridView.Rows.Addメソッドで直接DataGridViewにデータを追加します。

これで、DataGridViewに格納されましたので、表示されるようになります。

DataGridViewを更新する処理は、上記のように主に2つの更新方法があります。他にもLINQ等を利用したテクニックもあるんですが、その場合SQL Server 2005以上という制限があって難しいものがあります。とはいえ、最終的にはアプリケーションの用途に応じて、うまく使い合わせるといいことがあるかもしれません。

-追記履歴-

TableAdapterを利用しての処理方法の記述を書き直し。(2010/09/30)
コード内のコメントを修正。(2010/10/31)

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中