.net winforms data-binding nullable

.net - ¿La mejor forma de vincular un control de Winforms con un tipo anulable?



data-binding nullable (3)

Ooh, desagradable ... Solo puedo pensar en un par de formas de lograr esto y ninguno de ellos es lo que yo llamaría ideal.

  • El primero es escribir un contenedor para su objeto de datos que contenga elementos nulables que convierta todos los nulables en cadenas vacías. Enlace a su objeto envoltorio.

  • El segundo es asegurarse de que todos los valores en su base de datos no sean nulos ... de nuevo, no son ideales

  • El tercero que ya ha decidido que no es viable en esta situación es que cree un objeto personalizado que amplíe el cuadro de texto para agregar una propiedad que pueda vincularse a un valor nulo.

  • La cuarta forma más ideal en que podría pensar no parece ser posible. Cree una propiedad de extensión que le permita extender todos los objetos de la caja de texto y vincularla, pero no parece que las propiedades de extensión sean posibles en este momento. Parece que esta es una situación en la que este tipo de característica sería particularmente útil en .NET Framework.

Actualmente estoy usando databinding de winforms para conectar un formulario de edición de datos. Estoy usando el framework netTiers a través de CodeSmith para generar mis objetos de datos. Para los campos de base de datos que permiten nulos, crea tipos anulables. Descubrí que el uso de enlaces de datos de winforms a los controles no se vinculará correctamente con los tipos que aceptan nulos.

He visto soluciones en línea que sugieren que las personas crean nuevas clases de cuadros de texto que pueden manejar los tipos que aceptan valores nulos, pero que podría ser un dolor tener que cambiar los cuadros de texto en los formularios que ya he creado.

Inicialmente pensé que sería genial usar un método de extensión para hacerlo. Básicamente, crea una propiedad de extensión para la clase de cuadro de texto y se une a eso. Desde mi experiencia de método de extensión limitada y haciendo un poco de comprobación en línea, parece que no puede hacer una propiedad de extensión. Por lo que puedo decir, el enlace tiene que ser a través de una propiedad, ya que necesita poder obtener o establecer el valor para que un método de extensión no funcione.

Me encantaría encontrar una forma limpia de actualizar estos formularios usando algo así como métodos de extensión, pero si tengo que crear nuevos cuadros de texto y controles de cuadro combinado, eso es lo que haré.

Mi proyecto está actualmente limitado a .Net 2.0 debido al requisito de ejecutar en Windows 2000.

¿Alguna sugerencia?


Acabo de tropezar con este problema y es un verdadero dolor de cabeza.

Lo curioso de la unión de tipos anulables es que DataGridView los maneja sin problemas, solo son los cuadros de texto los que causan problemas.

Es bastante desagradable, incluso parece evitar el cierre de un formulario cuando tienes un valor vacío en el cuadro de texto y parece que tampoco puedes alejarlo.

Por lo tanto, no es una gran respuesta, pero mi sugerencia es tratar de mantener datagridviews para los tipos anulables en un formulario.

Otra sugerencia es usar un "proveedor de extensión" como se sugiere aquí aunque todavía no lo he probado:

EDITAR: ahora descargué el código de muestra en esta página y funciona EN FORMA BRILLANTE.

http://www.thejoyofcode.com/Databinding_and_Nullable_types_in_WinForms.NET.aspx


En la sección de comentarios del artículo mencionado anteriormente, uno de los carteles presenta una solución simple.

En lugar de vincularse con:

textBox1.DataBindings.Add("Text", myClass, "MyTextProperty");

Unirse con:

textBox1.DataBindings.Add("Text", myClass, "MyTextProperty", true, DataSourceUpdateMode.OnPropertyChanged, string.Empty);