連載
» 2006年05月10日 00時00分 公開

連載:.NETグリッド・コントロール大研究:第1回 .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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。