DGVPad(DataGridView)

せんぱい。DataGridViewを体系的に教えて く だ さ い ね♡

DgvPad―スタイル(列と行とセル)―

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 セル選択時に使用する前景色

スタイルの設定は、

  1. 全体 (DefaultCellStyle)
  2. カレント列 (カレント列のDefaultCellStyle)
  3. 行全体 (RowsDefaultCellStyle)
  4. 奇数行 (AlternatingRows.DefaultCellStyle)
  5. カレント行 (カレント行DefaultCellStyle)
  6. (新規行) (行テンプレート (RowTemplate))
  7. セル (CurrentCell.Style)

この順に考えるとわかりやすいよ。一つ一つのセルスタイルオブジェクトは共通で、上から下に順に実行して確定するんだ。合成するような感じで下に行くほど優先度が高くなる。

イメージで見るとこんな感じだよ。

全体
カレント列
行全体
奇数行  
カレント行  
新規行  
セル
   
列ヘッダー
行ヘッダー

 一つ例外があって、行の高さを変更したい場合は、新規行オブジェクトの高さプロパティ値で調整してからデータを表示するようにすればいいんだ。つまり、データを表示してから高さを調整すると追加行にしか影響しないけど、データが空の状態で高さを変更して行データを追加すると、全て新規行として扱ってくれるということかな。

それから、スタイルはセル毎に設定することはできるけど、プログラムも大変になるし、それぞれにスタイルオブジェクトが作られるので大量データにはむかないんだ。

書式(Format)はデータの型に依存するので、表示上は数値でもデータの型がString型になっていたら数値用の書式設定は有効にならないので注意しようね。列ソートの時にも説明したけど、手入力したデータはString型になるので数値用の書式は無効になってしまうのだけれど、その原因探しにはまらないようにしようね。