Buttonをクリックすると、プロパティ部が切り替わるよ。DataGridViewの列ヘッダーや行ヘッダをクリックすると選択した列や行のプロパティに切り替わるんだ。
DataGridViewをみると【(列と行の)ヘッダー部】と【(セルと呼ばれる)データ部】で構成されているのがわかるよね。
別の視点で見ると、一つ以上の【列(Column)】と1行以上の【行(Row)】の組み合わせと考えることができるよね。ある列とある行の交点にある部分が【セル(Cell)】だ。実際、DataGridViewはこの考えで実装されているんだ。
つまり
まず、列情報を設定する。
次に、それぞれの列に該当するセルのデータを1行にまとめて追加する
これが基本だよ。
XMLファイルのみでDataSourceで設定する場合は、列名と列タイトルは設定してくれるけどそれ以外は初期値のままだよ。データタイプを定義する場合は、XMLSchema1.xsdといったXMLスキーマで定義するといいよ。
見落としがちなことがあって、(同一列の)セルのデータ型が異なるときソートで失敗してプログラムが強制終了されてしまうという致命的なことが起こるんだ。数値型のデータで埋められているデータ列に対して編集や追加したデータはString型になっていて、この状態でソートすると内部で行っている型チェックに引っかかっり、例外をCatchしていないと強制終了してしまうんだ。数値列で列ソートを許可している場合、対策が必要だよ。
スタイルには、Null値の仮想表示、書式(Format)、セル内の配置(Alignment)、オフセット、フォント、背景色と前景色、セル選択時の背景色と前景色がある。
データ | NullValue | セル値がDBNull.Valueまたはnullのときセル表示する値 |
動作 | Format | セル表示する書式指定文字列 |
動作 | Alignment | セル表示するテキストの配置 |
配置 | Padding | DataGridViewCellの端とその内容との間隔 |
配置 | WrapMode | 1行表示/複数行表示の切り替え |
表示 | BackColor | セルの背景色 |
表示 | Font | テキストに適用するフォント |
表示 | ForeColor | セルの前景色 |
表示 | SelectionBackColor | セル選択時に使用する背景色 |
表示 | SelectionForeColor | セル選択時に使用する前景色 |
スタイルの設定は、
この順に考えるとわかりやすいよ。一つ一つのセルスタイルオブジェクトは共通で、上から下に順に実行して確定するんだ。合成するような感じで下に行くほど優先度が高くなる。
イメージで見るとこんな感じだよ。
全体 | |
カレント列 | |
行全体 | |
奇数行 | |
カレント行 | |
新規行 | |
セル | |
列ヘッダー | |
行ヘッダー |
一つ例外があって、行の高さを変更したい場合は、新規行オブジェクトの高さプロパティ値で調整してからデータを表示するようにすればいいんだ。つまり、データを表示してから高さを調整すると追加行にしか影響しないけど、データが空の状態で高さを変更して行データを追加すると、全て新規行として扱ってくれるということかな。
それから、スタイルはセル毎に設定することはできるけど、プログラムも大変になるし、それぞれにスタイルオブジェクトが作られるので大量データにはむかないんだ。
書式(Format)はデータの型に依存するので、表示上は数値でもデータの型がString型になっていたら数値用の書式設定は有効にならないので注意しようね。列ソートの時にも説明したけど、手入力したデータはString型になるので数値用の書式は無効になってしまうのだけれど、その原因探しにはまらないようにしようね。