2008-10-21 61 views
8

Esta es la excepción que obtengo cuando intento vincularme a un System.Type.Name.No se puede enlazar a la propiedad o al Nombre de la columna en el DataSource. Nombre del parámetro: dataMember

Aquí 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 la unión a System.Type, es que no pueden o hay alguna solución? No tienes problemas con vincular a otros tipos.

+0

Posiblemente relacionado con [Enlace de datos a las propiedades de un objeto que implementa IEnumerable] (http://stackoverflow.com/q/1336395/167897) – Wernight

Respuesta

3

Encontró una solución. Hecho una clase

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

    public string StubPropertyTypeName = string.Empty; 
} 

creado una fuente de unión

this.propertyStubBindingSource.DataSource = typeof(StubPropertyType); 

creado una instancia de la clase y el cuadro de texto vinculados a la misma.

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

funciona exactamente como se requiere.

11

De hecho, hay un tratamiento especial de Tipo ... este enfoque se utiliza en el IDE, etc. para configurar los metadatos con anticipación. Si nos fijamos en las consolidaciones generados-IDE, que hacen cosas como:

bindingSource1.DataSource = typeof(MyObject); 

diciendo "cuando tenemos datos reales, esperamos MiObjeto isntance (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.

Su clase extra parece un enfoque razonable.

0

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

Cuestiones relacionadas