【使い方】
DataGridTextBoxColumn の派生クラスを生成し、以下の内容を記述する。
イベントの戻り値で、編集中止が設定されている場合は、処理を中断します。
/// <summary>ValueChangingEvent イベントを処理するメソッドを定義します。</summary>
public event ValueChangingEventHandler ValueChanging;
/// <summary>
/// 値を編集するためにセルを準備します。
/// (列のセルがアクティブになる時に呼ばれます。)
/// </summary>
protected override void Edit( CurrencyManager source, int rowNum, Rectangle bounds
, bool readOnly, string instantText, bool cellIsVisible )
{
//Debug.WriteLine("Edit Start");
//編集開始前の値をセットします。
object oldValue = GetColumnValueAtRow(source,rowNum);
//CellValueChangingイベント定義があれば、発生させ、イベントルーチンの戻り値を設定する
if(ValueChanging != null)
{
//指定したrowNumのRowオブジェクトを取得
object value = source.List[rowNum];
if( value != null )
{
DataGridValueChangingEventArgs e
= new DataGridValueChangingEventArgs( value, rowNum, this.MappingName, oldValue );
//イベント発生
ValueChanging(this, e);
//編集中止の場合、Exit
if ( e.Cancel )
return;
}
}
// 元のEditメソッドを実行する
base.Edit( source, rowNum, bounds, readOnly, instantText, cellIsVisible );
}
セル編集時のイベントデータを定義します。
イベントメソッド内で判断に必要となる、カレントレコードオブジェクト、カレントレコード番号、列名、セルの値を渡します。
イベントデータの戻り値として Cancel を返します。
/// <summary>
/// ValueChangingEvent イベントを処理するメソッドを表します。
/// </summary>
/// <param name="sender">イベントのソース。</param>
/// <param name="e">DataGridのセル更新情報。</param>
public delegate void ValueChangingEventHandler(object sender, DataGridValueChangingEventArgs e);
/// <summary>
/// DataGridValueChangingEventArgs の概要の説明です。
/// </summary>
public class DataGridValueChangingEventArgs : EventArgs
{
private object m_Row;
private int m_RowIndex;
private string m_ColumnName;
private object m_CellValue;
private bool m_Cancel = false;
/// <summary>
/// DataGridValueChangingEventArgs クラスの新しいインスタンスを初期化します。
/// </summary>
/// <param name="row">編集元となる行データオブジェクト</param>
/// <param name="rowNum">編集元となる行の番号</param>
/// <param name="col">編集元となる列名</param>
/// <param name="cellValue">編集対象となる Object 値</param>
public DataGridValueChangingEventArgs( object row, int rowNum, string col, object cellValue )
{
m_Row = row;
m_RowIndex = rowNum;
m_ColumnName = col;
m_CellValue = cellValue;
}
/// <summary>
/// カレントセルを含む Row Object を取得します。
/// </summary>
public object Row
{
get{ return m_Row;}
}
/// <summary>
/// カレントセルの値を取得します。
/// </summary>
public object CurrentCellValue
{
get{ return m_CellValue;}
}
/// <summary>
/// カレントセルのレコード番号を取得します。
/// </summary>
public int RowIndex
{
get{ return m_RowIndex;}
}
/// <summary>
/// カレントセルを含む列に割り当てられたデータ メンバの名前を取得します。
/// </summary>
public string ColumnName
{
get{ return m_ColumnName;}
}
/// <summary>
/// 編集操作の中止示す値を取得または設定します。
/// </summary>
public bool Cancel
{
get{ return m_Cancel;}
set{ m_Cancel = value;}
}
}
|