用于检查网格视图单元格中的值是否已编辑的条件

本文关键字:是否 编辑 条件 检查 网格 视图 单元格 用于 | 更新日期: 2023-09-27 18:27:05

我想知道是否有任何条件可以检查是否编辑了单元格中的值。我可以用其他方式(如果值==值)blabla。。但我需要写很多东西来比较这些值。。我需要另一种方式。

感谢

用于检查网格视图单元格中的值是否已编辑的条件

如果您使用的是带有对象数据源的自定义对象/List绑定。你可以定义一个基类,继承它&像一样将您的对象标记为脏

public class ObjectBase
{
    private bool _isDirty;
    private bool _isNew = true;
    protected void MarkDirty()
    {
         _isDirty = true;
    }
    protected void MarkAsNew()
    {
         _isNew = true;
    }
    public bool IsDirty
    {
         get { return _isDirty; }
    }
  }

然后在您的对象类中,您将继承这个类似的基类

public class myClass:ObjectBase
{ 
    public int Id {get; set;} 
    public string Name {get; set;}
}

当你更新你的对象时,在表示层中将它们标记为脏的,然后在业务层检查它们是否脏,如果是,更新其他返回"没有更新的更改"

    public static bool UpdateItem(Employee myEmployee)
   {
        if(myEmployee.IsDirty)
      {
            return myEmployeeDB.UpdateItem(myEmployee);
      }
   }

DataGridViewCell不跟踪更改。如果您需要知道只有一个单元格的Value发生了更改,请使用CellValueChanged事件并在那里完成您的工作。如果你需要知道哪些单元格被修改了,这样你就可以枚举它们并做必要的事情,试试这个:

HashSet<DataGridViewCell> changedCells = new HashSet<DataGridViewCell>();
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    DataGridView dgv = sender as DataGridView;
    if (!changedCells.Contains(dgv[e.ColumnIndex, e.RowIndex]))
    {
        changedCells.Add(dgv[e.ColumnIndex, e.RowIndex]);
    }
}

不要忘记挂接DataGridView的CellValueChanged事件。当您需要更改单元格的列表时,请执行以下操作:

foreach (DataGridViewCell cell in changedCells)
{
        // Your work here
}

这仅适用于UI级别。如果您的数据也被代码更改,您将需要不同的方法。