我需要检测在或其他控件TextBox
中对表单所做的更改。Datagridview
这里我留下一个小例子作为测试代码(GoogleDrive链接)
IdentificarCambios.zip
这对我来说非常有效,但我认为应该有一个更优化和实用的方法。我知道它
Dataset
包含一个方法,HasChanges
但我不知道如何使用它来获得我想要的结果。
下面我开始解释:
在这里我们看到这个表单,你可以看到Boton Salvar
它被禁用,因为它是最初加载的原始数据。如果我对这些单元格中的任何一个进行更改:Hora Entrada
, Hora Salida
,Cantidad
则在触发事件后会调用一个CellEndEdit
调用,其工作方式如下:Función
verificar_cambios
最初,当加载数据时,我有两个
dataset
,我将原始数据集复制到第二个数据集,以便它们包含相同的数据,然后在函数中Verificar_cambios
我执行验证在其中找到的值是否与dataset original
在otro dataset
if 相同则不botón Salvar
启用,否则botón Salvar
启用。
正如您在第二张图片中看到的那样,我更改了celda
to5
函数的值,10
并启用了botón salvar
. 但是,如果usuario
他再次将其值放回5
函数deshabilita
中botón salvar
。我不知道如何用HasChanges
.
已编辑
代码片段:
加载数据时:
dataset_cambios = dataset_datos.Copy();
检查更改功能:
private void verificar_cambios()
{
string cantidad = string.Empty cantidad_cambios = string.Empty;
for (int fila = 0; fila < dataset_datos.Tables[0].Rows.Count; fila++)
{
if (dataset_datos.Tables[0].Rows[fila]["cantidad"].ToString() == string.Empty)
cantidad = string.Empty;
else
cantidad = dataset_datos.Tables[0].Rows[fila]["cantidad"].ToString().Trim();
if (dataset_cambios.Tables[0].Rows[fila]["cantidad"].ToString() == string.Empty)
cantidad_cambios = string.Empty;
else
cantidad_cambios = dataset_cambios.Tables[0].Rows[fila]["cantidad"].ToString().Trim();
//Verificando si la variable del dataset original es diferente a la del dataset guardado inicialmente.
if (cantidad.Equals(cantidad_cambios))
{
//No hay cambios
btn_salvar.Enabled = false;
}
else
{
//Si hay cambios
btn_salvar.Enabled = true;
break;
}
}
}
那么我该如何优化这种方法,或者创建一个更有效的方法呢?
注意:我没有把项目的所有代码都放上,以免把出版物放大这么多。
Visual Studio 2010 和 .NET Framework 4
如果您使用对象集合和 Linq 会更容易,使用实体框架和 changetracker 会更好,但对于您传递的示例,这是一个解决方案:
在 generate_data 方法中添加 AcceptChanges(从现在开始获取更改)
在 check_changes 方法中获取更改
这样我们恢复当前值和原始值