2009-02-26 3 views
4

Ich habe ein Business-Objekt, das eine Zusammensetzung von untergeordneten Objekten ist.
Ich verwende Datenbindung in Visual Studio 2008, um an Steuerelemente in einem Windows-Formular zu binden.DataMember Eigenschaft [ObjectName] kann nicht auf der DataSource gefunden werden

Aber ich bekomme den obigen Fehler in der InitializeComponent-Methode des Formulars.

Nehmen wir an, ich habe ein Objekt namens ParentObject, das eine generische Liste enthält, ChildListObject. Das ParentObject hat auch Child-Objekt, das selbst ein Child-Objekt hat. (Dh ParentObject.ChildObject.ChildObject)

stelle ich die Hauptbindungsquelle:

BindingSource.Datasource = ParentObject 

I ein Gitter hinzufügen und es Bindungsquelle:

GridBindingSource.Datasource = ParentObject 

und die Datamember auf:

Jetzt ist die Datenquelle des Rasters auf GridBindingSource gesetzt:

Me.MyDataGridView.DataSource = Me.GridBindingSource 

Es gibt auch andere Steuerelemente, die Eigenschaften des Parent gebunden sind und die ParentObject.ChildObject

ich dies in einem isolierten Projekt getestet und es funktioniert gut, so dass ich habe Probleme, herauszufinden, was die echter Bug ist? Code, der früher funktioniert hat, hört plötzlich auf zu arbeiten.

Der Fehler I ist (wenn ich die Namen der Objekte in dem obigen Beispiel):

„Datamember Eigenschaft Childobject kann nicht auf der Datasource finden“

Es schlägt fehl auf:

Me.MyDataGridView.DataSource = Me.GridBindingSource 

Seltsam, wenn ich entfernen < System.Diagnostics.DebuggerStepThrough() > und dann, wenn es scheitert einfach weiter so ist es in Ordnung ??? Aber es schlägt immer noch in der Laufzeit fehl.

Hat jemand Ideen, die mir in die richtige Richtung zeigen könnten? Das nächste, was ich beim googlen gefunden habe, ist, dass es etwas damit zu tun hat, dass die Reihenfolge des generierten Designercodes durcheinander gerät. Code, der funktionierte, wird plötzlich aufhören zu arbeiten.


Dieses Problem scheint zu kommen und zu gehen. Wenn ich einfach weitermache, nachdem der Fehler behoben wurde, läuft das Programm problemlos weiter. Möglicherweise ein Fehler in VS. Aber zur Laufzeit ist der Fehler immer noch vorhanden.

Was verursacht dieses Problem? Wie verhindere ich das Auftreten?

Antwort

1

Die einzige Lösung die ich gefunden habe das tun folgenden:

  1. alle Spalten aus dem Netz entfernen
  2. an das Netz Fügen Sie die gewünschten Spalten zurück (dies verhindert, dass die Spalten im nächsten Schritt gelöscht werden)
  3. Entfernen Sie die Rasterdatenquelle
  4. Legen Sie die Datenquelle des Rasters im Formular laden Ereignis fest.
1

Datamember sollte eine Zeichenfolge sein, die definiert, welche Eigenschaft der Liste angezeigt werden soll. Nicht notwendig hier.

Dies würde Sinn machen:

BindingSourceB.Datasource = ParentObject.ChildList; 

Wenn Ihr an ein Netz zu binden, legen Sie kein Datamember. Stellen Sie einfach Datenquelle ein und verwenden Sie den Designer, um das Raster zu konfigurieren.

Der GetType ist da, um dem Designer zu helfen. In Designer-Eigenschaften sollten Sie BindingSourceB auf ChildListObject-Typ festlegen und dann tun, was ich oben getan habe.

+0

Sorry das Beispiel war leicht falsch. Ich habe bearbeitet und repariert. Es gab tatsächlich kein Zwischenobjekt, nur ein Elternobjekt, das als generische Liste von Kindobjekten enthält. Ich habe die Eigenschaft Datamember nicht auf dem Raster festgelegt. Aber danke für deine Hilfe trotzdem. – ptutt

+0

OK, ich habe meine Antwort bearbeitet. Ich hoffe, es ist nützlich. – gcores

2

einfach bewegen Sie Ihren Code generieren zu Ereignis wie folgt aus:

private void MainForm_Load(object sender, EventArgs e) 
{ 
    Me.MyDataGridView.DataMember = "DataMember"; 
    Me.MyDataGridView.DataSource = "DataSource"; 
} 
3

Ich habe versucht, mehrere Experimente zu diesem Das Problem nur in diesem Zustand passiert Wenn Sie eine Baseform und Binding darauf haben, wenn Sie erben ein neues InheritedForm von diesem BaseForm , wenn Sie zusätzliche Bindungsquelle auf InheritedForm im Zusammenhang mit der BindingSource (die von BaseForm geerbt hat) Sie haben den Designer error.Ich habe keine Designer-Lösung, aber wenn Ignorieren und Weiter alles normal sein wird, während Sie Projekt wieder

bauen oder Sie setzen Datamember von Code müssen

0

ich das gleiche Problem

Private WithEvents _model As MyModel 

die WithEvents entfernt hatte und alles funktioniert wieder

0

Aus irgendeinem Grund wurde Fehler im Fehlerfenster nicht registriert, bis ich manuell geöffnet th Der "Designer" für mein Formular. Sobald ich die Designeraufgabe geöffnet habe, konnte ich dann die Fehler auf Bindungen sehen und solche manuell entfernen.

Was verursacht dies ist, habe ich Datenquellen aus meinem Projekt entfernt, aber es hat nicht den gesamten Code hinter ihnen automatisch magisch, denke ich.

Verwandte Themen