2016-03-08 5 views
8

Ich habe 2 DTO Klassen:Kann nicht an die Eigenschaft oder Spalte "Spaltenname" in der DataSource binden. Parametername: datamember

public class AddressDto 
{ 
    public string Street { get; set; } 
    public string City { get; set; } 
    public string PostCode { get: set: } 
} 

public class CustomerDto 
{ 
    public int Number{ get; set; } 
    public string Name { get; set; } 
    public AddressDto Address { get: set: } 

    public CustomerDto() 
    { 
     Address = new AddressDto(); 
    } 
} 

Ich habe ein Formular mit einer Bindungsquelle darin, die CustomerDto bindet. Ich habe auch ein benutzerdefiniertes Steuerelement mit den Adressfeldern. Dieses benutzerdefinierte Steuerelement verfügt über eine Bindungsquelle, die an AddressDto10 bindet. Die Textfelder des Steuerelements sind korrekt an die Adresseneigenschaften gebunden.

Die Steuerung macht die folgende Eigenschaft:

[Bindable(BindableSupport.Yes, BindingDirection.TwoWay)] 
[Browsable(false)] 
public object Address 
{ 
    get { return bindingSource.DataSource; } 
    set { bindingSource.DataSource = value; } 
} 

Auf einer Maschine, die ich alle Fehler nicht auf CheckBinding() bekommen. Auf einem anderen Computer erhalte ich jedoch die obige Ausnahme, wenn ich versuche, das Formular in Runtime zu öffnen. In der Designzeit funktioniert alles gut.

Die Steuerung verfügt über 3 TextBoxes und der Designer fügt die folgenden Bindungen:

this.bindingSource.AllowNew = true; 
this.bindingSource.DataSource = typeof(AddressDto); 

this.txtStreet.DataBindings.Add(new Binding("Text", this.bindingSource, "Street", true)); 
this.txtCity.DataBindings.Add(new Binding("Text", this.bindingSource, "City", true)); 
this.txtPostCode.DataBindings.Add(new Binding("Text", this.bindingSource, "PostCode", true)); 

Irgendwelche Ideen, wo das Problem sein kann?

+0

Verwenden Sie den Eigenschaftspfad in Ihren Bindungen? Wenn ja, könnte es diesem Problem ähnlich sein [Bindung und Polymorphie - Eigenschaft oder Spalte (Winforms) nicht binden] (http://stackoverflow.com/questions/33789575/binding-and-polymorphism-cannot-bind-property-or -column-winforms/33790268 # 33790268) –

+0

@IvanStoev Nein. Ich verwende keine Eigenschaftenpfade. –

+1

Wie wäre es mit einer Art von [mcve] –

Antwort

5

änderte ich den Code:

[Bindable(BindableSupport.Yes, BindingDirection.TwoWay)] 
    [Browsable(false)] 
    public object Address 
    { 
     get { return bindingSource.DataSource; } 
     set 
     { 
      if (value != null && value != System.DBNull.Value) 
       bindingSource.DataSource = value; 
      else 
       bindingSource.DataSource = typeof(AddressDto); 
     } 
    } 

Wert war System.DBNull. Mit der obigen Änderung wird die Ausnahme nicht mehr ausgelöst.

Dies löst das Problem. Warum der Wert DBNull ist, ist jedoch immer noch nicht klar, weil ich reine POCO-Klassen als meine Datenquellen für meine Bindungsquellen verwende.

+0

Die Winforms Databinding wurde erstellt, um Ziel-Databases zu zielen, seine Fähigkeit, an Objekte zu binden, wurde später bolted. Deshalb erhalten Sie einen DBNUll anstelle von Null. –

Verwandte Themen