第1回 .NETの新しいデータグリッドを大解剖:連載:.NETグリッド・コントロール大研究(2/4 ページ)
業務アプリケーション構築において最も頻繁に利用され、開発者が実装に最も労力を要するであろうグリッドを徹底解説。
DataGridViewコントロールのオブジェクト構造
次にDGVコントロールを構成する一連のオブジェクトについて見ていこう。
コントロールであるDGVは、クラス・ライブラリ的に見るとDataGridViewクラスの1つのインスタンス(オブジェクト)であるのだが、実際にDGVコントロールを構成する行や列、セルはすべて個々の別のオブジェクトであり、DGVオブジェクトはいわばこれらのオブジェクトの入れ物となっている。
このためDGVコントロールのプログラミングをマスターするには、各オブジェクトの基となるクラスの機能(プロパティやメソッドなど)はもとより、各クラスの継承関係や各オブジェクトの包含関係をも熟知しておく必要がある。
■列オブジェクト
まず列を示すオブジェクトだが、これは、
DataGridViewColumnクラス
の派生クラスのオブジェクトである*。この派生クラスには次の図に示すように標準では6種類のクラスが存在し、先ほどの画面の6種類の列に対応している。DataGridViewColumnクラスでは「列オブジェクト」に共通のメソッドやプロパティが実装されており、各種類の列に固有の機能は、その派生クラスで実装されているというわけだ。
* 以降で登場するDGVコントロール関連のクラス(クラス名はすべて「DataGridView〜」で始まる)は、すべてSystem.Windows.Forms名前空間に属するクラスである。
この図の先頭にあるDataGridViewElementクラスは、DGVコントロールのすべての要素(列や行やセル)のベースとなるクラスだ。このクラスには例えばDataGridViewプロパティがあるが、このプロパティによりDGVコントロールのどの要素からも、それが属しているDGVコントロールを参照できる。
その派生クラスであるDataGridViewBandクラスは、列や行などの帯状(=Band)のオブジェクトを表すベース・クラスである。DataGridViewElementクラスにはもう1つ派生クラスがあり、そちらはセルを表すDataGridViewCellクラスである(後述)。
ちなみに、独自のコントロールを配置した列を使いたければ、DataGridViewColumnクラスから継承した派生クラスを自作することになる。
■行オブジェクト
DGVコントロールですでに行データを表示している場合、各行の行データは「行オブジェクト」により表される。行オブジェクトとは、
DataGridViewRowクラス
のオブジェクトである。このクラスも列オブジェクトと同様にDataGridViewBandクラスの派生クラスである。
■セル・オブジェクト
1つの行オブジェクトには、データの項目数(=その行が属するDGVコントロールの列数)分の「セル・オブジェクト」が含まれる。DGVコントロールで実際に表示されているデータを保持するのは、このセル・オブジェクトだ。
セル・オブジェクトは以下の図で示したDataGridViewCellクラスをベースとする派生クラスのオブジェクトである。セル・オブジェクトの種類は、おのずと列オブジェクトの種類と同じだけ必要となる*。例えば、イメージ列に含まれるセルはすべてDataGridViewImageCellオブジェクトである。
* このため独自の列を作った場合には、併せてそれに対応した独自のセルも実装しなくてはならない。
DGVコントロールが管理するオブジェクトは、実際にはこれら以外にもヘッダ内のセルを表すオブジェクトなど多数存在するが、まずはこれらのオブジェクトを押さえておけばよいだろう。
■DataGridViewコントロールのコレクション
次の図はDGVコントロールの主要なオブジェクトの関係をまとめたものだ。
DGVコントロールの主要なオブジェクトの関連
列およびセルについては、実際にはこの図で示しているDataGridViewColumnオブジェクトあるいはDataGridViewCellオブジェクトの派生オブジェクトとなる。
図の左上にある「DGV」から伸びている「Columnsプロパティ」は、DGVコントロールのこのプロパティから各列の列オブジェクトにアクセスできることを示している。同様に、Rowsプロパティからは、DGVコントロールに含まれる各列の列オブジェクトにアクセスできる。また図では少し分かりにくいが、列オブジェクトのCellsプロパティからは、その列に含まれる個々のセル・オブジェクトにアクセスできる。
これら3つのプロパティの実体は、以下の表に示すコレクション・クラスのオブジェクトである。
プロパティ名 | コレクション・クラス名(プロパティの型) |
---|---|
Columnsプロパティ | DataGridViewColumnCollectionクラス |
Rowsプロパティ | DataGridViewRowCollectionクラス |
Cellsプロパティ | DataGridViewCellCollectionクラス |
3つのプロパティとそれに割り当てられるオブジェクトのクラス |
これらのプロパティには、DGVコントロールに列や行を追加したとき、あるいは行にセルを追加したときに、該当するコレクション・クラスのオブジェクトが作成され、設定される。
ここでは詳しく述べないが、コレクション・クラスの利用は.NETプログラミングでは頻繁に登場するため、ぜひ押さえておいてほしい。例えばAddメソッドによりコレクションの要素を追加したり、インデクサ(VBではデフォルト・プロパティとなっているItemプロパティ)を使ってインデックス番号によりコレクションの要素を取得したりといった具合だ。
以下では実際にコードを記述してDGVプログラミングを解説するが、そこでこれらのプロパティにも触れる。
Copyright© Digital Advantage Corp. All Rights Reserved.