Saber si un objeto se ha modificado

28/09/2004 - 17:55 por Oriol | Informe spam
Hola grupo,

Me gustaria saber si hay alguna forma facil y simple de comprovar si se han
modificado los objetos que hay en un formulario. Para que me entiendan,
tengo un winform con una serie de objetos (textboxs, datetimepickers,
comboboxs, checkboxs, etc...) Estos estan llenos de datos de los clientes, y
lo que quiero saber es si alguno de estos objetos se ha modificado para
guardarlos en la base de datos. Lo que quiero es algo como lo de los
ficheros Office, que el programa sabe si tiene que preguntar para guardar
los cambios o no. Y si no se ha modificado, pues no te molesta con
preguntas.

Por supuesto solo se modifican los valores (Text, checked, etc... no las
propiedades).

Pues eso, hay alguna forma de hacer eso?

Gracias a todos y un saludo.

Oriol.

Preguntas similare

Leer las respuestas

#1 Oriol
05/10/2004 - 13:18 | Informe spam
Nadie sabe?

Oriol.

"Oriol" <intranet[arroba]rvsa-itv.com> escribió en el mensaje
news:
Hola grupo,

Me gustaria saber si hay alguna forma facil y simple de comprovar si se


han
modificado los objetos que hay en un formulario. Para que me entiendan,
tengo un winform con una serie de objetos (textboxs, datetimepickers,
comboboxs, checkboxs, etc...) Estos estan llenos de datos de los clientes,


y
lo que quiero saber es si alguno de estos objetos se ha modificado para
guardarlos en la base de datos. Lo que quiero es algo como lo de los
ficheros Office, que el programa sabe si tiene que preguntar para guardar
los cambios o no. Y si no se ha modificado, pues no te molesta con
preguntas.

Por supuesto solo se modifican los valores (Text, checked, etc... no las
propiedades).

Pues eso, hay alguna forma de hacer eso?

Gracias a todos y un saludo.

Oriol.


Respuesta Responder a este mensaje
#2 Octavio Hernandez
05/10/2004 - 14:22 | Informe spam
Hombre, tanto como no saber...

Lo que parece difícil es encontrar una solución genérica al problema.
Se me ocurre:
a) Definir una clase FormThatDetectChanges (heredera de Form) que al
cargarse después de leer e inicializar los controles del formulario los
recorre todos, agregándoles un delegado al evento correspondiente
(TextChanged para los TextBox, CheckedChanged para los CheckBoxes, etc.). La
clase además define un campo privado bool hasModifications que se inicializa
en False y se pone a True desde el método asociado al delegado. Por útimo,
ponemos una propiedad pública HasModifications que devuelve el valor de la
variable.

Luego haces que todos los forms de tu programa hereden de esta clase en vez
de heredar de Form.

b) Crearte tu propia librería de controles que hereden de los estándar:
ModTextBox de TextBox, ModCheckBox de CheckBox, etc. agregándoles una nueva
propiedad pública 'Modified'. Agregarles a esos controles la funcionalidad
para que pongan a true el valor de esa propiedad al producirse cambios. Y
luego utiliza en tus aplicaciones esos controles en lugar de los
predefinidos.

Estas soluciones funcionarían tanto para formularios con conexión a datos
con sin conexión (pero tal vez puedas hacer algo mejor preguntando al
DataSet si sólo lo necesitas para controles data-bound).

Bueno, son sólo ideas...

Salu2 - Octavio

"Oriol" <intranet[arroba]rvsa-itv.com> escribió en el mensaje
news:
Nadie sabe?

Oriol.

"Oriol" <intranet[arroba]rvsa-itv.com> escribió en el mensaje
news:
> Hola grupo,
>
> Me gustaria saber si hay alguna forma facil y simple de comprovar si se
han
> modificado los objetos que hay en un formulario. Para que me entiendan,
> tengo un winform con una serie de objetos (textboxs, datetimepickers,
> comboboxs, checkboxs, etc...) Estos estan llenos de datos de los


clientes,
y
> lo que quiero saber es si alguno de estos objetos se ha modificado para
> guardarlos en la base de datos. Lo que quiero es algo como lo de los
> ficheros Office, que el programa sabe si tiene que preguntar para


guardar
> los cambios o no. Y si no se ha modificado, pues no te molesta con
> preguntas.
>
> Por supuesto solo se modifican los valores (Text, checked, etc... no las
> propiedades).
>
> Pues eso, hay alguna forma de hacer eso?
>
> Gracias a todos y un saludo.
>
> Oriol.
>
>


Respuesta Responder a este mensaje
#3 Oriol
05/10/2004 - 16:27 | Informe spam
Hola Octavio,

Ya se que es un problema complejo, y tus dos soluciones me parecen validas.
Lo que yo habia pensado era comprarar los datos de los controles con los que
tenia antes de las modificaciones (en caso que sea una modificacion). Es
decir, si estoy creando un registro nuevo, comparo con los valores por
defecto, y si es una modificacion, lo comparo con lo que ya tengo en la BD.
Si son diferentes, pregunto para guardar, sino, simplemente cierro.

Mi pregunta es si esto es mas costoso que los metodos propuestos por ti?

Mil gracias,

Oriol.

"Octavio Hernandez" escribió en el mensaje
news:Oq$
Hombre, tanto como no saber...

Lo que parece difícil es encontrar una solución genérica al problema.
Se me ocurre:
a) Definir una clase FormThatDetectChanges (heredera de Form) que al
cargarse después de leer e inicializar los controles del formulario los
recorre todos, agregándoles un delegado al evento correspondiente
(TextChanged para los TextBox, CheckedChanged para los CheckBoxes, etc.).


La
clase además define un campo privado bool hasModifications que se


inicializa
en False y se pone a True desde el método asociado al delegado. Por útimo,
ponemos una propiedad pública HasModifications que devuelve el valor de la
variable.

Luego haces que todos los forms de tu programa hereden de esta clase en


vez
de heredar de Form.

b) Crearte tu propia librería de controles que hereden de los estándar:
ModTextBox de TextBox, ModCheckBox de CheckBox, etc. agregándoles una


nueva
propiedad pública 'Modified'. Agregarles a esos controles la funcionalidad
para que pongan a true el valor de esa propiedad al producirse cambios. Y
luego utiliza en tus aplicaciones esos controles en lugar de los
predefinidos.

Estas soluciones funcionarían tanto para formularios con conexión a datos
con sin conexión (pero tal vez puedas hacer algo mejor preguntando al
DataSet si sólo lo necesitas para controles data-bound).

Bueno, son sólo ideas...

Salu2 - Octavio

"Oriol" <intranet[arroba]rvsa-itv.com> escribió en el mensaje
news:
> Nadie sabe?
>
> Oriol.
>
> "Oriol" <intranet[arroba]rvsa-itv.com> escribió en el mensaje
> news:
> > Hola grupo,
> >
> > Me gustaria saber si hay alguna forma facil y simple de comprovar si


se
> han
> > modificado los objetos que hay en un formulario. Para que me


entiendan,
> > tengo un winform con una serie de objetos (textboxs, datetimepickers,
> > comboboxs, checkboxs, etc...) Estos estan llenos de datos de los
clientes,
> y
> > lo que quiero saber es si alguno de estos objetos se ha modificado


para
> > guardarlos en la base de datos. Lo que quiero es algo como lo de los
> > ficheros Office, que el programa sabe si tiene que preguntar para
guardar
> > los cambios o no. Y si no se ha modificado, pues no te molesta con
> > preguntas.
> >
> > Por supuesto solo se modifican los valores (Text, checked, etc... no


las
> > propiedades).
> >
> > Pues eso, hay alguna forma de hacer eso?
> >
> > Gracias a todos y un saludo.
> >
> > Oriol.
> >
> >
>
>


Respuesta Responder a este mensaje
#4 Octavio Hernandez
06/10/2004 - 00:55 | Informe spam
Me parece que tu solución es más simple, pero valdría únicamente para
controles conectados a datos.

Slds - Octavio

"Oriol" <intranet[arroba]rvsa-itv.com> escribió en el mensaje
news:uVMD$
Hola Octavio,

Ya se que es un problema complejo, y tus dos soluciones me parecen


validas.
Lo que yo habia pensado era comprarar los datos de los controles con los


que
tenia antes de las modificaciones (en caso que sea una modificacion). Es
decir, si estoy creando un registro nuevo, comparo con los valores por
defecto, y si es una modificacion, lo comparo con lo que ya tengo en la


BD.
Si son diferentes, pregunto para guardar, sino, simplemente cierro.

Mi pregunta es si esto es mas costoso que los metodos propuestos por ti?

Mil gracias,

Oriol.

"Octavio Hernandez" escribió en el mensaje
news:Oq$
> Hombre, tanto como no saber...
>
> Lo que parece difícil es encontrar una solución genérica al problema.
> Se me ocurre:
> a) Definir una clase FormThatDetectChanges (heredera de Form) que al
> cargarse después de leer e inicializar los controles del formulario los
> recorre todos, agregándoles un delegado al evento correspondiente
> (TextChanged para los TextBox, CheckedChanged para los CheckBoxes,


etc.).
La
> clase además define un campo privado bool hasModifications que se
inicializa
> en False y se pone a True desde el método asociado al delegado. Por


útimo,
> ponemos una propiedad pública HasModifications que devuelve el valor de


la
> variable.
>
> Luego haces que todos los forms de tu programa hereden de esta clase en
vez
> de heredar de Form.
>
> b) Crearte tu propia librería de controles que hereden de los estándar:
> ModTextBox de TextBox, ModCheckBox de CheckBox, etc. agregándoles una
nueva
> propiedad pública 'Modified'. Agregarles a esos controles la


funcionalidad
> para que pongan a true el valor de esa propiedad al producirse cambios.


Y
> luego utiliza en tus aplicaciones esos controles en lugar de los
> predefinidos.
>
> Estas soluciones funcionarían tanto para formularios con conexión a


datos
> con sin conexión (pero tal vez puedas hacer algo mejor preguntando al
> DataSet si sólo lo necesitas para controles data-bound).
>
> Bueno, son sólo ideas...
>
> Salu2 - Octavio
>
> "Oriol" <intranet[arroba]rvsa-itv.com> escribió en el mensaje
> news:
> > Nadie sabe?
> >
> > Oriol.
> >
> > "Oriol" <intranet[arroba]rvsa-itv.com> escribió en el mensaje
> > news:
> > > Hola grupo,
> > >
> > > Me gustaria saber si hay alguna forma facil y simple de comprovar si
se
> > han
> > > modificado los objetos que hay en un formulario. Para que me
entiendan,
> > > tengo un winform con una serie de objetos (textboxs,


datetimepickers,
> > > comboboxs, checkboxs, etc...) Estos estan llenos de datos de los
> clientes,
> > y
> > > lo que quiero saber es si alguno de estos objetos se ha modificado
para
> > > guardarlos en la base de datos. Lo que quiero es algo como lo de los
> > > ficheros Office, que el programa sabe si tiene que preguntar para
> guardar
> > > los cambios o no. Y si no se ha modificado, pues no te molesta con
> > > preguntas.
> > >
> > > Por supuesto solo se modifican los valores (Text, checked, etc... no
las
> > > propiedades).
> > >
> > > Pues eso, hay alguna forma de hacer eso?
> > >
> > > Gracias a todos y un saludo.
> > >
> > > Oriol.
> > >
> > >
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida