データグリッドビューの実装方法
C#.net
データグリッドビューの実装方法
Windows 10 / Visual Stadio Community 2019 / .net 5.0
データグリッドビューにデータを表示する方法はいくつかあるが、データテーブルオブジェクトを利用する方法を紹介する。
仕組みをMVCモデルとしてみれば、データグリッドビューが「ビュー」、データテーブルは「モデル」と「コントロール」という位置づけになろう。
データグリッドビューは、行や列の高さや幅、文字のフォントや背景色といった外見に関する属性を定義し、表示の働きを制御する。データテーブルは、行列形式の実データを格納するオブジェクトで、レコードの追加や削除、ソートといったデータに関する操作を制御する。
データテーブルオブジェクトをデータグリッドビューの dataSourceプロパティに代入するだけで、データを表示することができる。
(1) データグリッドビューの作成
データグリッドビュー全体、列、属性を定義する。
(2) データテーブルの作成
データテーブルを作成し、列を定義し、データグリッドビューの DataSourceプロパティに代入する。この時点でデータテーブルの列に対応したデーターグリッドビューの列が作成され、列の属性の設定が可能になる。
(3) データの表示
データグリッドビューのデータソースをデータテーブルとした場合、データグリッドビューの列はデータテーブルの列を反映したものである。データテーブルの列を定義し、データグリッドビューのデータソースに設定した時点で初めてデータグリッドビューの列が使用可能となる。列の幅といったデータグリッドビューの列の属性の設定は、これ以降でなければ行うことができない。
データテーブルの列を定義する方法は、
(1) DataTableクラスの Columnsプロパティの Addメソッドで作成する。
(2) データベースに接続し SELECT文で取得した結果セットから、DataTableクラスの Loadメソッドを使い、データテーブルを作成することができる。SELECTの列名に対応した列が自動的に作成される。
本アプリケーションでは、初期処理において (1)の方法でデーターテーブルを作成し、データグリッドビューのデータソースに設定、その直後にデータグリットビューの列の属性(列の幅や列見出し)の設定を行う。
次に、データグリッドビューにデータを表示するとき、データベースから取得したデータは(2)の方法でデータテーブルに格納する。それによりここでもデータテーブルの列の定義が再び行われる。
なぜそのような2度手間なことを行っているのかというと、
データグリッドビューの列の属性の設定を初期処理で行わず、データベースの照会時にデータテーブルを作成したあと毎回行ってもいいのだが、そうすると冗長な上、体感的にもレスポンスが遅いと感じるほどである。
これを避けるために、列の属性の設定は初期処理で一回だけ行うようにしたのだが、そのためにはその前にデータテーブルを作成し、列を定義し、データグリッドビューのデータソースに設定しなくてはいけないので、このような流れとなっている。
またそうしたときに、DataTableクラスの Loadメソッドでデータセットを格納するデータテーブルは、初期処理時にデータグリッドビューのデータソースに設定したものでなければならないので、それを使い回すようにしている。
データベースからデータを取得する方法は、
MySQL にアクセスする を参照のこと。本処理はそこで紹介する MySQLクラスのメソッドを使用している。
(4) データの表示その2
プログラムによりデータテーブルを作成する手順を示す。取得したデータが辞書型の配列の場合、各レコードを順次読み込みデータテーブルの行を作成し追加する。SetFieldメソッドの第1引数がデータテーブルの行の列名、第2引数が値となる。
ソートについて
データテーブルクラスには、ソート機能が最初から組み込まれている。列見出しをクリックすれば、その列の値をキーに並び替えが行われ、列見出しには昇順/降順示すインディケータが表示される。これらはデフォルトの機能であり、何らコードの追加の必要はない。
本例のように複数の列を持ったテーブルで、ある列のソート行った結果、同値のレコードが並んだ場合、それらの並び順はシステム規定のものになる。本例では、同じ最高血圧のレコードが複数あった場合、その中での並びは日付(昇順)となる。
複数のソートキーを指定してデータの並び順をカスタマイズしたい場合はプログラムによる対応が必要である。以下に、最高血圧をクリックしたときソートキーを、最高血圧 > 最低血圧 > 日付 という順序にする手順を示す。
(1) データグリッドビューの列見出しをクリックしたときに起動するイベントプロシージャーを定義する。ソートキーと昇順 or 降順の指定を文字列で記述したスクリプトを作成し、データテーブルオブジェクトのプロパティに代入する。その時点でデータの並べ替えが行われる。
(2) クリックする列のソートモードを programmatic にする。これは列見出しをクリックしたときの動きをプログラムで制御するという意味。デフォルトは automatic でデフォルトのソート機能が働く。
ソースコード