DGV解体新書 > DataGridViewプロパティの初期設定
のぶ亭『プログラミングの相談窓口』 … 様々なプログラミング問題を個別対応致します |
DataGridViewの基本概念と操作を体感で学ぶ
デザイナーで表示されない非公開プロパティがリアルで見える
DataGridViewの基本的な考え方・使い方を簡単にマスターするフリー学習ソフト「DGVPad」
ダウンロード & マニュアル
DataGridViewプロパティの初期設定
DataGridViewのデザイナによるコーディングレスとコーディング
デザイナが出力する*****.Designer.cs(vb)ファイルに直接コードを書かないこと。
デザイナで対応していない項目(「プロパティウィンドウ」や「スマートタグパネル」から呼び出されるダイアログボックスに無いプロパティ)は、自分で追加記述してもデザイナの更新タイミングで削除されたり、間違った変更をするとデザイナでエラーが発生したりする場合があります。
ここでは、Visual Studioのデザイン機能を使って、コーディングせずに(コーディングレス)初期設定がどこまでできるのか!?
その方法とVSデザイナーが出力するコードを探っていきます(逆にデザイナーによる様々な初期設定機能を知らないと、デザイナーで行うべきこととプログラミングとの切り分けも難しくなってしまいます)。
これらのコードの意味・機能を知ることで、高機能なDataGridViewコントロールの仕組みやメカニズムを理解していくとともに、プログラミング(コーディング)時の基礎情報として役立てます。
DataGridView生成
デザイナでFormやコンテナにDataGridViewを貼り付けた時のDesigner.csに自動で追加されるコード。下記コードではDataGridViewの初期化と1つの列定義を追加しています。
① private System.Windows.Forms.DataGridView dataGridView1;
② this.dataGridView1 = new System.Windows.Forms.DataGridView();
③ ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit();
初期化の開始を通知するシグナルをオブジェクトに送信
internal bool InInitialization
Propertyの戻り値を設定
dataGridViewState2[DATAGRIDVIEWSTATE2_initializing] =
true;
④ this.dataGridView1.BackgroundColor =
SystemColors.GradientInactiveCaption;
this.dataGridView1.ColumnHeadersHeightSizeMode
= DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dataGridView1.Columns.AddRange(new
DataGridViewColumn[] {this.Column1});
this.dataGridView1.Dock =
System.Windows.Forms.DockStyle.Fill;
this.dataGridView1.Location = new
System.Drawing.Point(0, 0);
this.dataGridView1.Margin = new
System.Windows.Forms.Padding(3, 4, 3, 4);
this.dataGridView1.Name = "dataGridView1";
this.dataGridView1.RowTemplate.Height = 21;
this.dataGridView1.Size = new
System.Drawing.Size(466, 357);
this.dataGridView1.TabIndex = 0;
⑤ this.Controls.Add(this.dataGridView1);
⑥ ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit();
初期化の完了を通知するシグナルをオブジェクトに送信
dataGridViewState2[DATAGRIDVIEWSTATE2_initializing] = false;
DataGridViewのスマートタグパネル
デザイナ上でDataGridViewを選択すると、右上に小さな▲ボタンが表示されます。このボタンを右クリックすると下図のウィンドウが表示されます。
this.dataGridView1.AllowUserToAddRows =
false; ← 行追加の可否
this.dataGridView1.AllowUserToDeleteRows =
false; ← 行削除の可否
this.dataGridView1.ReadOnly =
true; ← 行編集の可否
this.dataGridView1.AllowUserToOrderColumns =
true; ← 列の並び替え(順序変更)の可否
列の追加...
簡易版版:列を追加する方法です。ここでは、列名、列の型、列のヘッダテキスト、可視、読み取り専用、固定のPropertyを追加設定します。キャンセルで終了するまでダイアログボックスは閉じません。間違って設定しても[列の編集...]で編集(追加、削除、訂正)ができます。
非バインド列とは、プログラムで操作する列項目です。データベースなどのデータセット(データテーブルなど)自動連携する場合は、データバインド列を選択します。なお、データセットが組み込まれていない場合は選択できません。
private DataGridViewTextBoxColumn Column1;
this.Column1 = new DataGridViewTextBoxColumn();
this.dataGridView1.Columns.AddRange(new DataGridViewColumn[] {this.Column1});
this.Column1.HeaderText = "Column1";
this.Column1.Name = "Column1";
Column1が[固定]になっていないため、Column2は[固定]の設定はできません。強行すると下記のメッセージが表示されます。
[固定]をOffにして追加すると以下のコードが生成されます。
private System.Windows.Forms.DataGridViewComboBoxColumn Column2;
this.Column2 = new System.Windows.Forms.DataGridViewComboBoxColumn();
this.dataGridView1.Columns.AddRange(new DataGridViewColumn[]
{this.Column1, this.Column2});
this.Column2.HeaderText = "Column2";
this.Column2.Name = "Column2";
this.Column2.ReadOnly = true;
列の固定
水平方向にスクロールしたとき、列が移動するかどうかを設定します。
this.Column1.Frozen = true;
列の「型」一覧
セルのコレクションをホスト
- DataGridViewButtonColumn(ボタン)
- DataGridViewCheckBoxColumn(チェックボックス)
- DataGridViewComboBoxColumn(コンボボックス)
- DataGridViewImageColumn(Image、画像、アイコン)
- DataGridViewLinkColumn(リンク)
- DataGridViewTextBoxColumn(テキスト:規定値)
データベース(DataSet、DataTable)のデータバインド
スマートタグパネルの「データソースの選択」で、DataTableを選択または「プロジェクト データソースの追加...」ウィザードでデータセットを作成します。
データセット関係のコンポーネントがプロジェクトに生成されると、列の追加でバインド列としてテーブルの項目を追加することができます。
実践データベース・プログラミング入門キット「DataSetとDataGridViewコントロールの概念と実践プログラミング講座」 Visual Studio 2008 .NET C#で詳しく解説しています。
列の編集...
「列の編集」ダイアログボックスで、列の型、データ、動作、配置、表示(Cellスタイル)、データバインドなどかなり細部まで設定することができます。
なお、列の型により設定できるプロパティが変わります。下表は、列型に対応するプロパティの一覧です。
Cell Style、Header Cell Style (セル スタイル、ヘッダ セル スタイル)
セルスタイルは、下表に示す通り様々なクラスで定義(設定)することができます。
DataGridViewのDefaultCellStyle、RowsDefaultCellStyle、AlternatingRowsDefaultCellStyleやRowHeadersDefaultCellStyleは上記のCell Styleビルダで生成することができます。また、細部はプログラムで微調整を行うこともできます。
このように様々なプロパティでスタイルを指定することができますが、最終的に有効なセルスタイルは下表を参照してください。
逆引きプロパティ設定
編集不可(禁止)にする(全体をロックする)
dataGridView1.ReadOnly = true;
偶数行、奇数行を色分けする
// 全ての列の背景色を指定にする(デフォルト色で良ければ変更不要) DataGridView1.RowsDefaultCellStyle.BackColor = Color.Aqua; // 奇数行の背景色を指定する DataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.Red;
列ヘッダー、行ヘッダーを非表示にする
// 列ヘッダー dataGridView1.ColumnHeadersVisible = false; // 行ヘッダー dataGridView1.RowHeadersVisible = false;
複数のセルの選択禁止
dataGridView1.MultiSelect = false;