セルの値を表示時に、値を変換して表示するには以下のイベントを使用します。
- CellFormattingイベント
また、通常CellFormattingイベントを処理する場合はCellParsingイベントも処理します。
CellParsingイベントはCellFormattingの逆を行うものでセルの値を特定の値に変換します。
以下、サンプルです。
// vim:set ts=4 sw=4 et ws is nowrap ft=cs: using System; using System.Data; using System.Data.Common; using System.Drawing; using System.Windows.Forms; namespace Gsf.Demo{ public class DemoForm : Form{ Button btnExec; DataGridView grdMain; DataTable _table; public DemoForm(){ InitializeComponent(); InitializeControlData(); InitializeEventSettings(); InitializeDataBindings(); } protected void InitializeComponent(){ SuspendLayout(); Text = "DataGridView Sample"; Size = new Size(400, 500); StartPosition = FormStartPosition.CenterScreen; btnExec = new Button(); btnExec.Text = "確認"; btnExec.Dock = DockStyle.Top; grdMain = new DataGridView(); grdMain.Dock = DockStyle.Fill; grdMain.AutoGenerateColumns = true; Controls.Add(btnExec); Controls.Add(grdMain); ResumeLayout(); } protected void InitializeControlData(){ if(_table == null){ _table = new DataTable("GRID_SOURCE"); _table.Columns.Add("ID"); _table.Columns.Add("NAME"); _table.Columns.Add("SEX", typeof(int)); for(int i = 0; i < 100; i++){ int mod = ((i + 1) % 2); DataRow newRow = _table.NewRow(); newRow.ItemArray = new object[]{i, string.Format("gsf_zero{0}", i), mod}; _table.Rows.Add(newRow); } } } protected void InitializeEventSettings(){ btnExec.Click += (s, e) => { // // 値の確認. // // 性別列のどこかを選択した状態で本ボタンをクリックするとParseされた値が // 確認できます。 // MessageBox.Show(grdMain.CurrentCell.Value.ToString()); }; grdMain.CellFormatting += (s, e) => { DataGridView grid = s as DataGridView; if(grid != null){ if(grid.Columns[e.ColumnIndex].Name == "SEX"){ if(e.Value != null){ // // 変換. // e.Value = (e.Value.Equals(0)) ? "男性" : "女性"; // // 後続の書式変換処理を行う. // (行わない場合はtrueを指定.) // e.FormattingApplied = false; } } } }; grdMain.CellParsing += (s, e) => { DataGridView grid = s as DataGridView; if(grid != null){ if(grid.Columns[e.ColumnIndex].Name == "SEX"){ if(e.Value != null){ try{ object original = e.Value; // // 変換. // e.Value = int.Parse(( e.Value.Equals("男性") ) ? "0" : "1"); // // セルの値が正常に解析できた事を示す。 // e.ParsingApplied = true; MessageBox.Show(string.Format("値が変換されました. (元:{0} => 後:{1})", original, e.Value)); }catch{ // // セルの解析に失敗. // e.ParsingApplied = false; } } } } }; } protected void InitializeDataBindings(){ grdMain.DataSource = new BindingSource(_table, ""); } [STAThread] static void Main(){ Application.EnableVisualStyles(); Application.Run(new DemoForm()); } } }
アプリを起動後、性別が表示されている列の値を"男性"もしくは"女性"と入力すると
値が変換されます。(CellParsingイベントが発生します。)
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場