DataGridViewに、カスタムオブジェクト,つまり自分で作成したデータクラスをバインド
するには、前回のようにBindingSourceを利用します。さらにDataGridViewのAutoGenerateColumns
プロパティをtrueにしておけば自動でカラムオブジェクトも作成してくれます。
でも、そのままだとカラム名がプロパティ名になってしまいます。
(例えば、"Name"というプロパティを定義している場合は、そのまま"Name"と出ます)
さらに、列の表示する順序も選べません。
サンプル程度ではいいのですが、実際にはプロパティ名のままのカラムヘッダーなどは
100%使わないでしょう。
(こういうとき、英語圏の人はいいなーって思ってみたり・・)
てことで、カラムをちゃんとした見た目にしてみます。
重要なプロパティは、以下です。
DataGridViewColumn.DataPropertyName
以下サンプルです。
// vim:set ts=4 sw=4 et ws is nowrap ft=cs: using System; using System.Collections.Generic; using System.Windows.Forms; using Gsf.Samples.Utility; namespace Gsf.Samples.DGV{ public class DataGridViewSample09 : BaseForm{ public DataGridViewSample09() : base("Gsf.Samples.DGV.DataGridViewSample09"){ // nop; } protected override void InitializeComponents(){ ////////////////////////////////////////////////// // // BindingSource. // BindingSource dataSource = new BindingSource(); dataSource.Add(new D("gsf_zero1", 10)); dataSource.Add(new D("gsf_zero2", 20)); dataSource.Add(new D("gsf_zero3", 30)); ////////////////////////////////////////////////// // // DataGridView. // DataGridView grid = new DataGridView(); grid.Dock = DockStyle.Fill; // 自動サイズ調整 grid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; grid.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders; // カラム情報を自動で作成しないように grid.AutoGenerateColumns = false; grid.DataSource = dataSource; // // カラム設定. // // DataGridViewColumnオブジェクトには、以下のプロパティが存在します。 // -DataPropertyName // -HeaderText // カスタムオブジェクトをバインドし、カラムを自動作成しない場合は // 自前でカラム構造を構築します。 // DataPropertyNameプロパティは、そのカラムにて表示するカスタムオブジェクトの // プロパティ名を指定します。(当然ですが、該当するプロパティはpublicである必要があります) // HeaderTextプロパティは、グリッドのヘッダーに表示される名称です。 // DataGridViewColumn c = new DataGridViewTextBoxColumn(); c.DataPropertyName = "Name"; c.HeaderText = "名前"; grid.Columns.Add(c); c = new DataGridViewTextBoxColumn(); c.DataPropertyName = "Age"; c.HeaderText = "年齢"; grid.Columns.Add(c); Controls.Add(grid); } [STAThread] static void Main(){ ApplicationUtility.Launch("Gsf.Samples.DGV.DataGridViewSample09"); } } /// <summary> /// サンプル用のデータクラスです。 /// </summary> class D{ string _name; int _age; public D(){ _name = null; _age = 0; } public D(string name, int age){ _name = name; _age = age; } public string Name{ get{ return _name; } set{ _name = value; } } public int Age{ get{ return _age; } set{ _age = value; } } } }
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場