net databind asp c# asp.net data-binding

databind - gridview asp net c#



No se puede enlazar a la propiedad o al Nombre de la columna en el DataSource. Nombre del parĂ¡metro: dataMember (3)

Esta es la excepción que obtengo cuando intento vincularme a un System.Type.Name.

Esto es lo que estoy haciendo:

this.propertyTypeBindingSource.DataSource = typeof(System.Type); /* snip */ this.nameTextBox1.DataBindings.Add( new System.Windows.Forms.Binding( "Text", this.propertyTypeBindingSource, "Name", true));

¿Hay algún truco con el enlace a System.Type, no está permitido o hay alguna solución alternativa? No tienes problemas con vincular a otros tipos.


De hecho, hay un tratamiento especial de Tipo ... este enfoque se utiliza en el IDE, etc. para configurar los metadatos antes de tiempo. Si miras los enlaces generados por IDE, hacen cosas como:

bindingSource1.DataSource = typeof(MyObject);

diciendo "cuando obtengamos datos reales, esperamos los eventos MyObject (s)"; es decir, cuando solicita "Nombre", busca la propiedad de nombre en MyObject , no el nombre de la instancia de Tipo. Esto permite que las grillas, etc. obtengan sus metadatos sin tener que esperar a los datos reales; pero, como consecuencia, no puede vincularse a Tipo "de verdad".

El código System.ComponentModel es idéntico entre enlaces simples y enlaces de lista (dar o tomar un administrador de moneda), por lo que los enlaces simples también heredan este comportamiento. Del mismo modo, no puede vincularse a las propiedades de una clase que implemente IList / IListSource, ya que esto se interpreta de una manera especial.

Tu clase extra parece un enfoque razonable.


Uno de los posibles motivos de este error es table / Dataset no tiene columna especificada. Especialmente, en el caso de Typed DataSet, asegúrese de tener los nombres propios en XSD que coincidan con los nombres de columna de la tabla.


Encontré una solución. Hizo una clase

public class StubPropertyType { public StubPropertyType(Type type) { this.StubPropertyTypeName = type.Name; } public string StubPropertyTypeName = string.Empty; }

creó una fuente vinculante

this.propertyStubBindingSource.DataSource = typeof(StubPropertyType);

creó una instancia de la clase y lo vinculó al cuadro de texto.

this.nameTextBox.DataBindings.Add( new System.Windows.Forms.Binding( "Text", this.propertyStubBindingSource, "StubPropertyTypeName", true));

funciona exactamente como se requiere