DataGrid üzerinde CellValueChanged yaklaşımı, DevExpress GridControl örneği

DataGrid üzerinde CellValueChanged yaklaşımı (örneğin DevExpress GridControl)

Eğer grid, DataTable veya BindingList bağlıysa en kolay yol:
Grid’in CellValueChanged veya RowUpdated event’inde eski değeri yakalayıp loglamaktır.

 

private Dictionary _oldValues = new Dictionary();

private void gridView1_CellValueChanging(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
{
    // Değişmeden önceki değerini yakala
    var oldVal = Convert.ToString(gridView1.GetRowCellValue(e.RowHandle, e.Column));
    var key = $"{e.RowHandle}_{e.Column.FieldName}";
    if (!_oldValues.ContainsKey(key))
        _oldValues.Add(key, oldVal);
}

private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
{
    var key = $"{e.RowHandle}_{e.Column.FieldName}";
    if (_oldValues.ContainsKey(key))
    {
        var oldVal = _oldValues[key];
        var newVal = Convert.ToString(e.Value);

        if (oldVal != newVal)
        {
            var vParam = new Structs.StDbParamList();
            vParam.Add("PKID", GetPrimaryKeyValue());
            vParam.Add("FKID", GetPrimaryKeyValue());
            vParam.Add("TABLOADI", "TABLE_ADI");
            vParam.Add("KOLONADI", e.Column.FieldName);
            vParam.Add("ESKIDEGER", oldVal);
            vParam.Add("YENIDEGER", newVal);
            vParam.Add("DEGISTIRENKULLANICI", DbStatic.LoginInfo.UserId);
            vParam.Add("COMPANYID", DbStatic.LoginInfo.KurumId);

            DbStatic.VDbUtils.ExecuteTableInsert("LOG_TABLE_CHANGE", vParam, false, false);
        }

        _oldValues.Remove(key);
    }
}