2009-06-29 19 views
5

Utilizo el enlace de datos para mostrar valores en cuadros de texto en un cliente C# Windows Forms. Cuando el usuario hace clic en Guardar, persisto mis cambios en la base de datos. Sin embargo, el nuevo valor en el editor activo se ignora (el valor anterior se guarda). Si cierro la pestaña del editor activo, y luego Guardar, el nuevo valor se conserva, como se esperaba.El control Data Forms de Windows no reconoce el cambio hasta perder el foco

¿Hay alguna manera de forzar al control activo a aceptar su valor antes de persistir?

Respuesta

5

Si puede obtener la instancia Binding que corresponde a la entrada (TextBox), puede llamar al WriteValue method para forzar el valor del control al objeto al que está vinculado.

También, puede llamar a la EndCurrentEdit method en el BindingManagerBase class (por lo general una instancia CurrencyManager class) para terminar la edición, pero que requiere la implementación de la interfaz ICancelAddNewIEditableObject o en el objeto que está obligado a (y no se requeriría para pez para el atado).

+0

Brillante, esto resolvió mi problema gracias. –

2

Esto es un truco, pero trate de alejar el enfoque del editor activo (estableciendo el foco en otra cosa, como el botón guardar, por ejemplo) en el evento del botón antes de llamar a guardar.

3

La solución que he usado es llamar al ValidateChildren en el Formulario desde el evento Guardar (llamar), antes de guardar realmente los registros de la base de datos. Esto fuerza la validación de todos los campos y, por lo tanto, vinculante para que ocurra sin perder el foco del control que se está editando actualmente en el formulario. Es realmente útil si el botón Guardar está en el sistema de menú de Windows y no se forma, además devuelve False si los datos en cualquier control del formulario no son válidos y, por lo tanto, se pueden usar para evitar guardar datos erróneos.

Esto también soluciona la actualización inconsistente del campo enlazado que ocurre cuando se usa OnPropertyChanged como método de enlace en lugar de OnValidation. Además, es fundamental si el método de enlace se establece en Nunca con llamadas separadas de WriteValue realizadas para cada evento validado atrapado por control.

Cuestiones relacionadas