databindings data .net winforms data-binding textbox

.net - databindings - data binding c#



Data-bound TextBox: no puede salir (3)

Suena como un problema de validación de datos. Compruebe si los controles en el formulario tienen sus propiedades CausesValidation establecidas en verdadero o falso.

También verifique la propiedad AutoValidate en el formulario. Probablemente esté configurado en EnablePreventFocusChange (que es el predeterminado).

También puede darse el caso de que el valor proporcionado en el cuadro de texto no pueda convertirse al tipo de propiedad al que está vinculado en el objeto de datos de origen. Creo que la clase Convert se usa para esto (aunque puedo estar equivocado aquí).

Es posible que desee consultar este artículo en MSDN que cubre la validación de winforms con cierto detalle.

Tengo un cuadro de texto vinculado a la propiedad de un objeto (de hecho, varios cuadros de texto) en un formulario. Esto es un editor para un objeto. Cuando edito algunos objetos y modifico valores en uno de los cuadros de texto, no puedo salir del cuadro de texto (ni por pestaña ni haciendo clic en otro cuadro de texto). Sin embargo, ese no es siempre el caso: al editar otros objetos (del mismo tipo) funciona bien.

Aquí hay un snipet de código:

txtValue.DataBindings.Add("Text", _SourceObject, "PlannedValue", True, DataSourceUpdateMode.OnPropertyChanged, Nothing, "c") txtEstPlacements.DataBindings.Add("Text", _SourceObject, "EstimatedPlacementCount") txtReference.DataBindings.Add("Text", _SourceObject, "Reference")

¿Alguna sugerencia?


Si su formulario tiene AutoValidate == EnablePreventFocusChange, terminará con el foco atascado en cualquier campo que no valide.

Tenga en cuenta que se considera que la validación ha fallado si hay una excepción al escribir el valor en el objeto.

Intente establecer un punto de interrupción en el punto de entrada del colocador de la propiedad que está vinculada al control donde el cursor se atasca. Luego, solo paso para ver si se genera una excepción.

Si el punto de interrupción nunca se dispara, la excepción puede estar ocurriendo dentro del marco de enlace de datos.

Al contrario de lo que se cree, el marco de enlace de datos sí registra errores y otra información útil: utiliza el soporte del espacio de nombres System.Diagnostics para hacerlo. Olvidé los detalles, pero están en MSDN: debería poder ver los diagnósticos en la ventana de mensajes de Visual Studio mientras se ejecuta su aplicación. Muy útil para resolver problemas con Databinding.


Para corregir el error de validación, que se debe a la incapacidad del enlace de datos para establecer DBNull.Value en textbox.text, puede agregar la siguiente línea en la sección Form_Load:

TextBox1.DataBindings["Text"].NullValue = string.Empty;

para cada cuadro de texto, desea permitir que el valor vacío se valide correctamente.

Ver más detalles sobre Microsoft Connect .

y en:

No se puede escapar del cuadro de texto vacío