2008-12-17 6 views
13

Actualmente estoy usando el enlace de datos 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.¿La mejor forma de enlazar datos entre un control de Winforms y un tipo anulable?

He visto soluciones en línea que sugieren que las personas creen nuevas clases de cuadros de texto que puedan manejar los tipos que aceptan valores NULL 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. Hasta donde 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 manera limpia de actualizar estos formularios utilizando 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 se limita actualmente a .Net 2.0 debido a la exigencia para funcionar en Windows 2000.

¿Alguna sugerencia?

Respuesta

31

En la sección de comentarios del artículo de referencia por encima de uno de los carteles se le ocurre una solución sencilla.

En lugar de unirse con:

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

Enlazar con:

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

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

  • El primero es escribir un contenedor para el objeto de datos que contiene nullables que convierte todos los nullables a cadenas vacías. Enlace a su objeto envoltorio.

  • El segundo es para asegurarse de que todos los valores de la base de datos no son nulos ... de nuevo, no es ideal

  • La tercera ya ha decidido que no es viable en esta situación es que se 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 que pude pensar no parece 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.

5

Me acabo de topar 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 ningún problema, solo son los cuadros de texto los que causan problemas.

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

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 extensor' como se sugiere aquí aunque no lo he probado todavía:

EDIT: ahora ha descargado el código de ejemplo en esta página y que funciona muy bien.

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

+0

el enlace no funciona más. – AlexP11223

Cuestiones relacionadas