DataGridViewでは、セルの値を表示するコントロールがいろいろ選べます。
デフォルトでは、以下のコントロール型のカラムタイプが存在しています。
- DataGridViewTextBoxColumn(テキスト)
- DataGridViewCheckBoxColumn(チェックボックス)
- DataGridViewButtonColumn(ボタン)
- DataGridViewComboBoxColumn(コンボボックス)
- DataGridViewLinkColumn(リンク)
- DataGridViewImageColumn(イメージ)
さらに、独自のカラムタイプを作成することも勿論可能です。
今回は、デフォルトで用意されているカラム達のサンプルです。
なお、各カラムタイプは全てDataGridViewColumnクラスのサブクラスと
なっています。
以下サンプルです。
// vim:set ts=4 sw=4 et ws is nowrap ft=cs: using System; using System.Diagnostics; using System.Drawing; using System.Windows.Forms; namespace Gsf.Samples.DGV{ public class DataGridViewSample03 : BaseForm{ DataGridView _grid; readonly string IE_PATH = @"C:/Program Files/Internet Explorer/IEXPLORE.EXE"; readonly string[] COMBO_DATA = new string[]{ "java" ,"c#" ,"python" ,"ruby" }; readonly string[] LINK_DATA = new string[]{ "http://www.google.co.jp" ,"http://www.yahoo.co.jp" ,"http://www.goo.ne.jp" ,"http://www.excite.co.jp" }; readonly Image[] IMAGE_DATA = new Image[]{ Image.FromFile("Resources/sample-image-01.jpg") ,Image.FromFile("Resources/sample-image-02.jpg") ,Image.FromFile("Resources/sample-image-03.jpg") ,Image.FromFile("Resources/sample-image-04.jpg") }; public DataGridViewSample03() : base("DataGridViewSample03"){ // nop; } protected override void InitializeComponents(){ ////////////////////////////////////////// // // カラムオブジェクトを一つずつ生成し指定していきます. // _grid = new DataGridView(); _grid.Dock = DockStyle.Fill; _grid.EditMode = DataGridViewEditMode.EditOnEnter; // ユーザによる行の追加を禁止. _grid.AllowUserToAddRows = false; // // 1列目はテキストボックス(読み取り専用). // DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn(); col1.HeaderText = "テキスト(読み取り専用)"; col1.DefaultCellStyle.ForeColor = Color.Red; col1.DefaultCellStyle.BackColor = Color.Gray; // 読み取り専用 col1.ReadOnly = true; // 自動サイズ調整. col1.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; // // 2列目はチェックボックス. // DataGridViewCheckBoxColumn col2 = new DataGridViewCheckBoxColumn(); col2.HeaderText = "チェックボックス"; // 自動サイズ調整無し col2.AutoSizeMode = DataGridViewAutoSizeColumnMode.None; // 2ステートのチェックボックス col2.ThreeState = false; col2.FlatStyle = FlatStyle.Standard; // // 3列目はボタン. // // ボタンカラムの場合、行データにデータを指定する必要はない。 // DataGridViewButtonColumn col3 = new DataGridViewButtonColumn(); col3.HeaderText = "ボタン"; col3.Text = "Push Me!"; col3.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; // 全てのセルに対して、同じボタンのテキストを適用するには以下のプロパティをtrueにする col3.UseColumnTextForButtonValue = true; // // 4列目はコンボボックス. // DataGridViewComboBoxColumn col4 = new DataGridViewComboBoxColumn(); col4.HeaderText = "コンボボックス"; col4.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; col4.MaxDropDownItems = 3; // 補完モードをON col4.AutoComplete = true; col4.FlatStyle = FlatStyle.Standard; // コンボに表示する値を設定. col4.Items.AddRange(COMBO_DATA); // // 5列目はリンク. // // ボタンと同じくUseColumnTextForLinkValueがtrueの場合は、全セルの値が // Textと同じになります。 // DataGridViewLinkColumn col5 = new DataGridViewLinkColumn(); col5.HeaderText = "リンク"; col5.UseColumnTextForLinkValue = false; col5.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; // リンクの動作は、システムと同じにする. col5.LinkBehavior = LinkBehavior.SystemDefault; // 一度リンク先に移動したことがある場合、リンクの色を変えるかどうか col5.TrackVisitedState = true; // // 6列目はイメージ. // DataGridViewImageColumn col6 = new DataGridViewImageColumn(); col6.HeaderText = "イメージ"; // // 残りの領域を埋めるよう、サイズ設定する. // col6.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; col6.Description = "サンプルイメージです。"; // イメージの配置方法を設定. // (Streachはクライアント領域にあわせて表示する指定.) col6.ImageLayout = DataGridViewImageCellLayout.Stretch; // // ボタン押下イベントを設定(セルのクリックイベントはDataGridViewに追加する). // // (CheckBoxのクリックでもこのイベントは発生する.) // _grid.CellContentClick += delegate(object sender, DataGridViewCellEventArgs e){ // // ボタンカラムかどうかを判断し、処理. // DataGridView grid = sender as DataGridView; if(grid.Columns[e.ColumnIndex] is DataGridViewButtonColumn){ MessageBox.Show(string.Format("{0}行目のボタンが押下されました.", (e.RowIndex + 1))); } }; // // リンク押下イベントを設定 // _grid.CellContentClick += delegate(object sender, DataGridViewCellEventArgs e){ // // リンクカラムの場合、IEで開く. // DataGridView grid = sender as DataGridView; if(grid.Columns[e.ColumnIndex] is DataGridViewLinkColumn){ // // 該当セルのデータを取得. // DataGridViewRow row = grid.Rows[e.RowIndex]; DataGridViewCell cell = row.Cells[e.ColumnIndex]; MessageBox.Show("ブラウザを起動します."); Process process = new Process(); process.StartInfo.FileName = IE_PATH; process.StartInfo.Arguments = cell.Value.ToString(); process.Start(); } }; // // 作成したカラムオブジェクトを追加. // _grid.Columns.AddRange( new DataGridViewColumn[]{ col1 ,col2 ,col3 ,col4 ,col5 ,col6 } ); // // 行データを設定. // Random r = new Random(); for(int i = 0; i < 10; i++){ _grid.Rows.Add( string.Format("readonly-text-{0}", i.ToString()) ,((r.Next(0, 10) % 2) == 0) ? true : false ,null ,COMBO_DATA[r.Next(0, 4)] ,LINK_DATA[r.Next(0, 4)] ,IMAGE_DATA[r.Next(0,4)] ); } Controls.Add(_grid); Width = 630; Height = 300; } /// <summary> /// アプリケーションエントリポイント. /// </summary> /// <remarks> /// 本クラスのテスト用にフォームを起動します. /// </remarks> [STAThread] static void Main(){ Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new DataGridViewSample03()); } } }
ついでに、今回のサンプルをあげときました。
実行には、.net framework 2.0が必要です。
サンプル
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場