Como detectar la edición en un registro nuevo?

20/05/2008 - 11:25 por Juan Carlos Paramá | Informe spam
Hola,

Llevo 2 días rompiendome la cabeza con esto y todavía no he encontrado
la solución optima. Si agrego un registro utilizando AddNew en un Binding
Source y establezco unos valores por defecto (no todos los obligatorios),
¿como puedo saber si el usuario ha editado el registro? Como una fila
Detached no tiene versión original no hay forma de comparar y como siempre
existe la versión Proposed tampoco hay forma de saber cuando se ha editado.
Basicamente, ¿como habeis solucionado el avisar de que el registro actual
(que es nuevo) no ha sido guardado cuando cuando se cierra un formulario?.

Gracias por adelantado.

Saludos.

Juan Carlos Paramá

Preguntas similare

Leer las respuestas

#1 Alfredo Novoa
20/05/2008 - 11:46 | Informe spam
Hola Juan Carlos,

On Tue, 20 May 2008 11:25:20 +0200, Juan Carlos Paramá
wrote:

Llevo 2 días rompiendome la cabeza con esto y todavía no he encontrado
la solución optima. Si agrego un registro utilizando AddNew en un Binding
Source y establezco unos valores por defecto (no todos los obligatorios),
¿como puedo saber si el usuario ha editado el registro?



¿Implementas la interfaz IEditableObject?

Esta interfaz tiene 3 métodos:

void BeginEdit();
void CancelEdit();
void EndEdit();

Basicamente, ¿como habeis solucionado el avisar de que el registro actual
(que es nuevo) no ha sido guardado cuando cuando se cierra un formulario?.



Supongo que ya no hace falta contestar a esto.



Saludos
Alfredo
Respuesta Responder a este mensaje
#2 Juan Carlos Paramá
20/05/2008 - 13:37 | Informe spam
Hola Alfredo.

"Alfredo Novoa" escribió en el mensaje de noticias
news:

Hola Juan Carlos,

On Tue, 20 May 2008 11:25:20 +0200, Juan Carlos Paramá
wrote:

Llevo 2 días rompiendome la cabeza con esto y todavía no he encontrado
la solución optima. Si agrego un registro utilizando AddNew en un Binding
Source y establezco unos valores por defecto (no todos los obligatorios),
¿como puedo saber si el usuario ha editado el registro?



¿Implementas la interfaz IEditableObject?



Pues no, pero tampoco tengo donde implementarlo. Estoy trabajando
exclusivamente
con las clases proporcionadas por el .NET, así que no se donde debería
implementarlo.

Quizas no me he explicado bien (dado que no domino demasiado el tema de
datos no sería
de extrañar), así que voy a intentarlo ahora.

En primer lugar aclarar que estoy trabajando en un formulario genérico que
realiza las funciones
básicas de mantenimiento y para saber si puedo crear un nuevo registro
necesito saber si el actual
esta siendo editado o no. Si esta siendo editado hay que preguntarle al
usuario que desea hacer.

Así que supongamos lo siguiente:

Tengo 1 formulario con un dataset (como ejemplo, supongamos una sola tabla).
Un Binding
Source que apunta a esa tabla. Ahora añado un botón que al pulsarlo hace una
llamada a
BindingSource.AddNew, lo que crea un DataRow de la tabla en cuestión pero
con el estado
Detached (se supone que al hacer la llamada a AddNew se llamá
automáticamente a BeginEdit).
Ahora supongamos que pulso de nuevo el botón y surgen los problemas. Antes
de añadir el nuevo (segundo)
registro (llamando a AddNew) necesito saber si el anterior registro ha sido
editado para decidir si descartarlo
o preguntarle al usuario que quiere hacer. Para ello debo llamar a
BindingSource.EndEdit, que podría fallar
porque el usuario no introdujo todos los datos obligatorios y si falla no
puedo saber si ha sido editado no.
Y si no falla tampoco puedo suponer que haya sido editado porque en algun
caso todos los valores podrían
ser opcionales. CancelEdit tampoco vale porque si ha sido editado estoy
perdiendo los cambios del usuario.

Espero que ahora se vea mejor el problema.

Gracias por la rápida respuesta.

Saludos.

Juan Carlos Paramá
Respuesta Responder a este mensaje
#3 Alfredo Novoa
20/05/2008 - 14:17 | Informe spam
Hola Juan Carlos,

On Tue, 20 May 2008 13:37:10 +0200, Juan Carlos Paramá
wrote:

¿Implementas la interfaz IEditableObject?



Pues no, pero tampoco tengo donde implementarlo. Estoy trabajando
exclusivamente
con las clases proporcionadas por el .NET, así que no se donde debería
implementarlo.



Ya, entonces quienes tienen que implementarlo son los "datasources"
que uses. Yo pensaba que estabas usando tus propias clases.

Tengo 1 formulario con un dataset (como ejemplo, supongamos una sola tabla).
Un Binding
Source que apunta a esa tabla. Ahora añado un botón que al pulsarlo hace una
llamada a
BindingSource.AddNew, lo que crea un DataRow de la tabla en cuestión pero
con el estado
Detached (se supone que al hacer la llamada a AddNew se llamá
automáticamente a BeginEdit).
Ahora supongamos que pulso de nuevo el botón y surgen los problemas. Antes
de añadir el nuevo (segundo)
registro (llamando a AddNew) necesito saber si el anterior registro ha sido
editado para decidir si descartarlo
o preguntarle al usuario que quiere hacer. Para ello debo llamar a
BindingSource.EndEdit, que podría fallar
porque el usuario no introdujo todos los datos obligatorios y si falla no
puedo saber si ha sido editado no.
Y si no falla tampoco puedo suponer que haya sido editado porque en algun
caso todos los valores podrían
ser opcionales. CancelEdit tampoco vale porque si ha sido editado estoy
perdiendo los cambios del usuario.

Espero que ahora se vea mejor el problema.



Si estás usando DataTables pues tendrás utilizar los sucesos que
generan como el suceso RowChanged

http://msdn.microsoft.com/en-us/library/w9y9a401(VS.85).aspx

Estas son las acciones que pueden venir en los argumentos del suceso
RowChanged:

Nothing The row has not changed.
Delete The row was deleted from the table.
Change The row has changed.
Rollback The most recent change to the row has been rolled back.
Commit The changes to the row have been committed.
Add The row has been added to the table.
ChangeOriginal The original version of the row has been changed.
ChangeCurrentAndOriginal The original and the current versions of the
row have been changed.


Saludos
Alfredo
Respuesta Responder a este mensaje
#4 Juan Carlos Paramá
20/05/2008 - 16:12 | Informe spam
Ok. Le echaré un vistazo a lo del eventos.

Gracias.

Hay tantas opciones que me pierdo un poco con las posibilidades

Saludos.

Juan Carlos Paramá


"Alfredo Novoa" escribió en el mensaje de noticias
news:

Hola Juan Carlos,

On Tue, 20 May 2008 13:37:10 +0200, Juan Carlos Paramá
wrote:

¿Implementas la interfaz IEditableObject?



Pues no, pero tampoco tengo donde implementarlo. Estoy trabajando
exclusivamente
con las clases proporcionadas por el .NET, así que no se donde debería
implementarlo.



Ya, entonces quienes tienen que implementarlo son los "datasources"
que uses. Yo pensaba que estabas usando tus propias clases.

Tengo 1 formulario con un dataset (como ejemplo, supongamos una sola
tabla).
Un Binding
Source que apunta a esa tabla. Ahora añado un botón que al pulsarlo hace
una
llamada a
BindingSource.AddNew, lo que crea un DataRow de la tabla en cuestión pero
con el estado
Detached (se supone que al hacer la llamada a AddNew se llamá
automáticamente a BeginEdit).
Ahora supongamos que pulso de nuevo el botón y surgen los problemas. Antes
de añadir el nuevo (segundo)
registro (llamando a AddNew) necesito saber si el anterior registro ha
sido
editado para decidir si descartarlo
o preguntarle al usuario que quiere hacer. Para ello debo llamar a
BindingSource.EndEdit, que podría fallar
porque el usuario no introdujo todos los datos obligatorios y si falla no
puedo saber si ha sido editado no.
Y si no falla tampoco puedo suponer que haya sido editado porque en algun
caso todos los valores podrían
ser opcionales. CancelEdit tampoco vale porque si ha sido editado estoy
perdiendo los cambios del usuario.

Espero que ahora se vea mejor el problema.



Si estás usando DataTables pues tendrás utilizar los sucesos que
generan como el suceso RowChanged

http://msdn.microsoft.com/en-us/library/w9y9a401(VS.85).aspx

Estas son las acciones que pueden venir en los argumentos del suceso
RowChanged:

Nothing The row has not changed.
Delete The row was deleted from the table.
Change The row has changed.
Rollback The most recent change to the row has been rolled back.
Commit The changes to the row have been committed.
Add The row has been added to the table.
ChangeOriginal The original version of the row has been changed.
ChangeCurrentAndOriginal The original and the current versions of the
row have been changed.


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