DGV解体新書 > DDataGridViewの使い方を体系的に学ぶ「DgvPad」
のぶ亭『プログラミングの相談窓口』 … 様々なプログラミング問題を個別対応致します |
DataGridViewコントロール
表形式(Excelのような)によるデータ編集が可能な高機能なコントロールで、Dataset経由でデータバインドをサポートしています(データベースについてはコチラの豪儀を参考)。高機能なので習得するためには、データをセットして一々プログラムでプロパティを変更しながら確認する作業が必要です。 当然、プロパティの組み合わせもあります。
DataGridView学習・動作確認ソフト「DgvPad」
データをセットして、様々なプロパティを変更してどのようになるのを確認する「DGVPad」を使って解説していきます。
DataGridViewの基本概念と操作を体感で学ぶ
デザイナーで表示されない非公開プロパティがリアルで見える
DataGridViewの基本的な考え方・使い方を簡単にマスターするフリー学習ソフト「DGVPad」
ダウンロード & マニュアル
を使った学習法
DGVPadを使えば、次の手順でDataGridViewコントロールの基本がマスターできます。
- ユーザー操作の基本設定
- データ表示(簡易、CSV、XML、SQLServer)
- 外観設定、列・行ヘッダー設定、表示調整
- 操作と振る舞い調整
- 様々なCellStyleの設定
- 操作全般の調整
- プロパティの設定・状態確認(ソースコードで確認)
- エラー処理
- プログラムによる処理
GDPadは、実行状態でプロパティ(デザイナー公開/非公開)操作ができるフリーの学習ソフトです。
DataGridView(DGV)コントロールの概念とメカニズムと実践講座
DataGridViewコントロールは多数のクラスで構成され、公開メンバーが多数に昇る、多機能かつ高性能な表コントロールです。
Tips的ショートコードで完結(他の機能に依存、関連、影響を受けずに独立)する場合もありますが、インテリジェントなコントロールですから、Propertyを変更すると矛盾や動作異常を起こす場合もありかなり複雑になっています。
単純に目先のコードにばかり目がいくと足元をすくわれかねない、面倒なコントロールです。このコントロールを解体しながらメカニズムや仕組みを理解することが近道です。
DataGridViewは、データベースとの専用データバインド用コントロールではありません。
- DataSetのDataTableから必要なフィールドを指定する「データバインド列」
- プログラムでデータをセットする「非バインド列」
があり、それぞれの列は独立して組み合わせた設定をすることができます。
DataGridViewの大きな特徴として、データベースのテーブルやクエリを参照するだけならコーティングレス(Visual Studioのデザイナやデータベース ウィザードなどを使えば、独自のコーディングは不要)で簡単に作ることができます。
また、行追加が可能であれば、オペレーションでデータの入力、編集や行削除を行うこともコーディングレスで可能です。
但し、データの保存に関しては(データバインド、非バインドに関わらず)自動で行うことはできません。
DataGridViewの初期設定
メカニズム・仕組み
DataGridViewの基本は初期設定と列(Column)定義から始まる。
初期設定でもプログラミングでも、まずはじめに「列の定義」をします。
- DataGridViewの基本は「列:Column」
- 7つの型
- テキストボックス:DataGridViewTextBoxColumn(デフォルト列)
- ボタン:DataGridViewButtonColumn
- チェックボックス:DataGridViewCheckBoxColumn
- コンボボックス:DataGridViewComboBoxColumn
- イメージ:DataGridViewImageColumn
- リンク:DataGridViewLinkColumn
- カスタム列
- モード
- 連結モード(バインド・モード)
- 非連結モード(非バインド・モード)
- デザインによる列関連プロパティ設定
- 列の追加
- 列の並び替え
- 列の削除
- 列の表示・非表示
- 列の詳細設定
- データソースの指定(バインディング)
- IBindingList または ITypedList を実装するクラス
- DataSet
- DataTable
- DataView
- DataViewManager など
- IList を実装しオブジェクトのインデックス付きコレクションを持つクラス
- ArrayList
- 厳密に型指定されたオブジェクトの厳密に型指定された IList
- Customer []
- List<CustName>
- IBindingList または ITypedList を実装するクラス
- 7つの型
- 行:Rows
- セル:Cell
- プログラムによる振る舞いの制御
- 大量データを扱う「仮想モード」
プログラミングでセルを考える場合、「行」→「列」→「セル」の順になります。
デザイン機能を使うことにより、コーディングレスでここまで対応できる
データソースを作成して設定すると、データベースと連携してデータが表示される
列の型をコンボボックスにすると、コードと名称の連携も自動対応
データベース項目に連動して、合計値などを求めて表示することも可能
データベースに対して、参照、追加。削除も(コーディングレスで)自動連携
データソースの項目と完全対応する必要はなく、自由に項目選択することも可能
デザインで出力されるコードを理解することで、デザインを使わないコーディングも簡単にできることになります。実績のある****.Designer.cs(vb)から必要なコードをCut&Pasteすればデザインで行った最低限の状態から始めることができます。
どこまでデザイナーが対応し、どこからコーディングするのかを見定めることがポイントです。そのためにも、デザインでどこまでできるのかその限界を知り、DGVのプロパティを知ることです。面倒なのは、プロパティとデザイン一覧で対応していない項目です。
応用例
仮想モード(大規模なデータのストアで使用)
DataGridViewコントロールで非常に大きな表データを 表示するときは、VirtualMode プロパティを true に設定して、コントロールとデータ ストアとのやり取りをプログラムで管理します。これにより、コントロールのパフォーマンスを微調整します。
dataGridView1.VirtualMode = true;
DataGridViewで、行数および列数を作成後、CellValueNeeded イベントを使用してセルを設定します。
DataGridView コントロールがバインド モードの場合、非バインド列の値を保持するには、仮想モードを使用する必要があります。バインド モードでの非バインド列をキーとする並べ替えはサポートされていません。
カスタム データ ストアとやり取りするために使用できるイベントが用意されています。