winform una net enlazar datos como combo c# winforms combobox datasource designer

net - como enlazar un combobox a una base de datos en c#



¿Cómo crear un ComboBox derivado con un origen de datos predefinido que sea amigable con el diseñador? (3)

El problema es que el diseñador realmente hace algo de compilación y ejecución en un contexto ligeramente diferente de lo que normalmente hace el programa.

En el constructor, puede ajustar su código en:

if (!DesignMode) { //Do this stuff }

Eso le dirá al diseñador que no ejecute ningún código de inicialización mientras se está diseñando.

Me gustaría crear un control derivado de System.Windows.Forms.ComboBox que está vinculado a una lista de objetos que recupero de la base de datos. La idea es que otros desarrolladores pueden simplemente dejar caer este control en su formulario sin tener que preocuparse por el origen de datos, vinculante, a menos que lo deseen.

Intenté extender el combobox y luego establecer DataSource, DisplayMember y ValueMember en el constructor.

public class CustomComboBox : ComboBox { public CustomComboBox() { this.DataSource = MyDAL.GetItems(); // Returns List<MyItem> this.DisplayMember = "Name"; this.ValueMember = "ItemID"; } }

Funciona cuando ejecuto, pero arroja muchos errores en Visual Studio una vez que se agrega a cualquier formulario. El error que recibo es:

La "Generación de código para propiedades ''Elementos'' falló. El error fue: ''Referencia de objeto no configurada para una instancia de un objeto''

¿Cuál es la forma correcta de lograr esto (C #, Winforms, .NET 2.0+)?


Mi comentario habitual aquí: DesignMode no es confiable en ninguna situación que no sea si el control se coloca directamente en una superficie de diseño, es decir, si el control se coloca en otro control, DesignMode no es verdadero incluso si está en modo de diseño. No he encontrado ninguna manera confiable de saber si está en modo de diseño, especialmente con controles heredados. Incluso las variantes que usan Site no son confiables si el control se hereda de un control no visual (por ejemplo, Common Dialog).

Ver http://keyofdflat.livejournal.com/5407.html (asegúrese de leer el último comentario).