私はしばらくの間、変更されたものをいつでも検出DataGridViewRow
DataGridView
できるようなメカニズムを探していましたが、DataGridView
これを行う簡単な方法がない場合は。そして、私はこの実装を行いました
public partial class MyDatagrid : DataGridView
{
public event EventHandler<RowChangingArgs> RowUpdating;
public MyDatagrid()
{
InitializeComponent();
this.CellBeginEdit += OnCellBeginEdit;
}
private DataGridViewRow oldRow;
private int currentRow;
private void OnCellBeginEdit(object sender, DataGridViewCellCancelEventArgs args)
{
if(oldRow == null || currentRow != args.RowIndex)
{
if(currentRow != args.RowIndex && oldRow != null)
{
var newRow = this.Rows[args.RowIndex];
foreach (var cell in oldRow.Cells)
{
foreach (var cell1 in newRow.Cells.Cast<object>().Where(cell1 => !cell.Equals(cell1)))
{
if(RowUpdating!= null)
RowUpdating.Invoke(this, new RowChangingArgs { OldRow = oldRow, NewRow = newRow});
oldRow.Dispose();
goto called;
}
}
}
called:
oldRow = this.Rows[args.RowIndex].Clone() as DataGridViewRow;
currentRow = args.RowIndex;
}
}
public class RowChangingArgs : EventArgs
{
public DataGridViewRow OldRow { get; set; }
public DataGridViewRow NewRow { get; set; }
}
}
例:
ユーザーが行1と列1を編集し、同じ行からn列を編集し続けます。ユーザーが他の行の編集を開始します。行1の古いコンテンツと行1の新しいコンテンツでイベントを発生させます。
これはこれを行うための良い方法ですか、それとも私は何かを逃しましたか?