Windows Formプログラムを行っていく上で、非常に使い勝手のいいコンポーネントに「DataGridView」があります。
表示を行ったり、こっそりデータをリストの中に隠したりと色々できるコンポーネントですが、思いの外このコンポーネントに関する技術的な情報って少ない気がします。
なので、意外に重要なんだけどほとんど語られていないDataGridViewのデータの更新について書いてみたいと思います。
まずはじめに、DataGridViewは、自動更新してくれませんということを念頭に置いておきましょう。
VSのデザイナーで設定すると、あとは勝手にやってくれるものだと思い込んじゃいますが、違うので注意です。
実際、僕がそうでした(苦笑)。
では、データ更新を行うときは、どのようなコードを書く必要があるのかというと、以下のような複数の方法があります。
- DataGridViewに直接データを格納する方法
- DataTableをDataGridViewのDataSourceに割り当てる方法
- DataGridViewの中身を一つずつ作る方法
1番目はDataGirdViewのDataSourceにDataTableをバインドさせながらデータを格納する方法です。
この場合は、あらかじめ定義しているテーブルアダプタのFillメソッドを呼び出します。このときのパラメータはDataSetに含まれる割り当てたいDataです。
// DBから取得したデータをDataGridViewに割り当てる。
DataGridView1.DataSource = TableAdapter.Fill(DataSet.Data);
次にDataTableをDataGirdViewのDataSourceに割り当てる方法です。
// DataTableをDataGridViewに割り当てる。 DataGridView1.DataSource = data; // DBからデータを取得 DataSet.DataTable data = TableAdapter.GetData();
結構単純なコードなんですが、TableAdapterで定義したクエリからDataTableに格納します。
そこで取得したデータをDataGridViewのDataSourceにバインドさせるだけです。そんなに難しいことではありません。
めんどくさいと思ってしまうのは、最後に紹介する一から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)