CellValueChangedイベントは、文字通りセルの値が変更された際に発生します。
このイベントは、セルの値がコミットされた時に発生します。
DGV関連で、最も使用されるイベントの一つではないでしょうか。
以下サンプルです。
以下のサンプルでは、セルにフォーカスが当たった時点で現在の値を保持しておき
CellValueChangedイベント発生時に、元の値と現在の値を表示するようになっています。
using System; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; namespace Gsf.Samples.CSharp { /// <summary> /// DataGridView.CellValueChangedイベントのサンプルです。 /// </summary> /// <remarks> /// CellValueChangedイベントは、セルのデータが変更された際に /// 発生します。 /// </remarks> public partial class MainForm : Form { /// <summary> /// 変更される前のセルの値. /// </summary> string _oldCellValue; public MainForm() { InitializeComponent(); // // イベントを設定 // DispatchEvents(); } private void DispatchEvents() { Load += new EventHandler(MainForm_Load); } /// <summary> /// フォームのロード時にコールバックされます。 /// </summary> /// <param name="sender">イベント送信元</param> /// <param name="e">イベント引数</param> void MainForm_Load(object sender, EventArgs e) { Text = "DataGridViewSample18"; DataGridView grid = new DataGridView(); grid.Dock = DockStyle.Fill; grid.DataSource = GetDataSource(); grid.EditMode = DataGridViewEditMode.EditOnEnter; // // イベントを設定します。 // grid.CellEnter += new DataGridViewCellEventHandler(grid_CellEnter); grid.CellValueChanged += new DataGridViewCellEventHandler(grid_CellValueChanged); Controls.Add(grid); Size = new Size(400, 300); } /// <summary> /// セルにフォーカスが当たった際にコールバックされます。 /// </summary> /// <param name="sender">イベント送信元</param> /// <param name="e">イベント引数</param> void grid_CellEnter(object sender, DataGridViewCellEventArgs e) { // // 元の値を保持. // DataGridView grid = sender as DataGridView; if(grid != null){ _oldCellValue = grid[e.ColumnIndex, e.RowIndex].Value.ToString(); } } /// <summary> /// セルの値が変更された際にコールバックされます。 /// </summary> /// <param name="sender">イベント送信元</param> /// <param name="e">イベント引数</param> void grid_CellValueChanged(object sender, DataGridViewCellEventArgs e) { // // 元の値と現在の値を表示. // DataGridView grid = sender as DataGridView; if(grid != null){ string cellValue = grid[e.ColumnIndex, e.RowIndex].Value.ToString(); string message = string.Format("元の値:{0} ⇒ 現在の値:{1}", _oldCellValue, cellValue); MessageBox.Show(this, message, "値が変更されました。"); } } object GetDataSource() { BindingSource source = new BindingSource(); source.DataSource = typeof(Model); source.Add(new Model(1.ToString(), "gsf_zero1", 20.ToString())); source.Add(new Model(2.ToString(), "gsf_zero2", 21.ToString())); source.Add(new Model(3.ToString(), "gsf_zero3", 22.ToString())); return source; } } /// <summary> /// グリッドで使用するデータモデルです。 /// </summary> internal class Model { string _id; string _name; string _age; public Model(string id, string name, string age) { _id = id; _name = name; _age = age; } public string Id { get { return _id; } set { _id = value; } } public string Name { get { return _name; } set { _name = value; } } public string Age { get { return _age; } set { _age = value; } } } }
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場