2012-03-06 90 views
0

我想知道是否有任何条件来检查单元格的值是否被编辑。 我可以用其他方式做到这一点(使用If value == value)bla bla..but但我需要写很多东西来比较这些值..我需要另一种方法。检查gridview单元格的值是否被编辑的条件?

感谢

+0

您使用的是自定义对象还是数据表? – 2012-03-06 11:47:55

+0

我正在使用gridview – 2012-03-06 11:48:44

+0

您需要在客户端执行此操作还是在回发时检查数据库? – Kaf 2012-03-06 11:52:32

回答

0

如果您正在使用一个对象的数据源的自定义对象/列表绑定工作。您可以定义一个基类,继承它&标记你的对象脏象

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;} 
} 

Whenver你更新你的对象,将它们标记为肮脏的表示层,那么你检查他们是在业务层一样,如果是更新否则返回“不改变更新”

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

heh这么多的代码,我只是要求一个简单的说明来检查是否编辑过单元格 – 2012-03-06 12:02:02

0

DataGridVie脏wCell不会跟踪更改。如果您需要知道只有一个单元格的值已更改,请使用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级别。如果你的数据被代码改变了,你将需要不同的方法。

+0

hmm,cellvalue的改变无法找到库中用到了什么? – 2012-03-06 12:36:33

+0

我的不好,我假设(但错误地)平台之间的相同功能。这只是WinForms,对不起。 – 2012-03-06 12:58:27

+0

uff,在asp.net中这样做的任何方式? – 2012-03-06 13:02:44

相关问题