2008-10-21 14 views
8

Jest to wyjątek, który pojawia się, gdy próbuję powiązać system.Type.Name.Nie można powiązać właściwości lub kolumny Nazwa w DataSource. Nazwa parametru: dataMember

Oto co robię:

this.propertyTypeBindingSource.DataSource = typeof(System.Type); 

/* snip */ 

this.nameTextBox1.DataBindings.Add(
    new System.Windows.Forms.Binding(
     "Text", 
     this.propertyTypeBindingSource, 
     "Name", true)); 

jest jakiś trik z wiązania się System.Type, jest to niedozwolone lub jest jakieś obejście? Nie mają problemów z powiązaniem z innymi typami.

+0

Prawdopodobnie powiązane z [Databinding do właściwości obiektu implementującego IEnumerable] (http://stackoverflow.com/q/1336395/167897) – Wernight

Odpowiedz

3

Znaleziono obejście. Wykonane klasa

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

    public string StubPropertyTypeName = string.Empty; 
} 

stworzony wiążące źródło

this.propertyStubBindingSource.DataSource = typeof(StubPropertyType); 

utworzony instancję klasy i związane z nim pole tekstowe.

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

działa dokładnie tak, jak trzeba.

11

Rzeczywiście, istnieje specjalne traktowanie typu ... to podejście jest używane w IDE itp., Aby skonfigurować meta-dane z wyprzedzeniem. Jeśli spojrzeć na IDE generowanych wiązań, robią takie rzeczy jak:

bindingSource1.DataSource = typeof(MyObject); 

mówiąc: „kiedy mamy prawdziwych danych, oczekujemy MyObject isntance (s)”; to jest, gdy pytasz o "Nazwa", szuka właściwości nazwy na MyObject - a nie nazwy instancji typu. Umożliwia to sieciom itp. Uzyskiwanie ich metadanych bez konieczności oczekiwania na prawdziwe dane; ale w konsekwencji nie można powiązać z typem "na serio".

Kod System.ComponentModel jest identyczny między prostymi powiązaniami i powiązaniami list (podaj lub pobierz menedżer walut), więc proste powiązania również dziedziczą to zachowanie. Podobnie nie można powiązać właściwości klasy, która implementuje IList/IListSource, ponieważ jest to interpretowane w specjalny sposób.

Twoja dodatkowa klasa wydaje się rozsądnym podejściem.

0

Jedną z możliwych przyczyn tego błędu jest tabela/zestaw danych, które nie mają określonej kolumny. Szczególnie w przypadku Wpisanego zestawu danych upewnij się, że masz odpowiednie nazwy w dopasowaniu XSD z nazwami kolumn z tabeli

Powiązane problemy