2009-08-26 17 views
0

Ich habe eine Hauptklasse, die ein DataSet erstellt und auffüllt, und eine Instanz dieser Klasse wird dann als Referenz an Untersteuerelemente meiner Anwendung übergeben. Ich möchte dieses Dataset verwenden, um an Komponenten zu binden, in diesem Fall eine Listbox. Dies ist für eine Windows Forms-Anwendung..Net Listbox DataBinding Problem

Heres, was ich versuche:

channelTypesLB.DataBindings.Add("Text", synData.ds, "ChannelTypes.channelType"); 

Hinweis, ich habe auch schon versucht, diese: (nicht sicher, ob noch ein Unterschied)

channelTypesLB.DataBindings.Add("Text", synData.ds.Tables["ChannelTypes"], "channelType"); 

Theres keine Fehler, und ich sehe nicht, die Daten in der Listbox ... wenn ich synData.ds.Tables["ChannelTypes"].Rows.Count ausspreche, sagt es mir, dass es tatsächlich Daten in dieser Datentabelle gibt.

Fehle ich etwas? Ich habe auch channelTypesLB.Refresh(); nach dem Einstellen der Datenbindung.

Dies kann auch hilfreich sein ... Dies ist der Code in meiner Haupt-Klasse, wo der Datensatz erstellt wird, nicht sicher, ob sein vielleicht ein Umfang Problem, würde ich mich vorstellen, ich einen Fehler erhalten hätte:

private DataSet _ds = new DataSet(); 
public DataSet ds { get { return _ds; } } 

Antwort

3

Versuchen der ListBox Datasource anstatt Bindung an die Text-Eigenschaft:

channelTypesLB.DataSource = synData.ds; 
channelTypesLB.DisplayMember = "ChannelTypes.channelType"; 

ich bin kein Experte Databinding mit irgendwelchen Mitteln, aber ich glaube, dass die Art und Weise von Datenbindung, die Sie gerade sie die Kontrolle zu tun ist an eine PropertyManager bindend, die verwendet wird, um ein val zu binden eines Objekts auf einen Wert eines anderen. Durch Setzen der DataSource sollte es an eine CurrencyManager binden, die verwendet wird, um an eine Collection zu binden.

Here's a quick overview of WinForms databinding

+0

Hrmm, das funktioniert ... verwendet DisplayMember anstelle von DataMember ... Ich würde den 1 Liner der Verwendung von DataBindings obwohl –

+0

whoops bevorzugen, das war ein Tippfehler - nicht so etwas wie ein DataMember. Sie können auch eine 'BindingSource' erstellen, die selbst über eine DataSource und DisplayMember verfügt (obwohl sie über Konstruktor zugänglich sind, glaube ich) und ListBox.DataSource = BindingSource setzen – STW

+0

Danke, dass Sie mich in die richtige Richtung weisen –

1

ich WinForms hier gehe davon aus, da es keine ASP.NET-Tag ist ...

channelTypesLB.DataSource = synData.ds.Tables["ChannelTypes"].DefaultView; 
channelTypesLB.DisplayMember = "channelType"; 

Nur für den Fall ist es ASP.NET obwohl versuchen:

channelTypesLB.DataSource = synData.ds.Tables["ChannelTypes"].DefaultView; 
channelTypesLB.DataTextField = "channelType"; 
channelTypesLB.DataValueField = "channelTypeId"; // I'm assuming this field exists, replace with your id field 

channelTypesLB.DataBind(); 
+0

Ja, winforms. Irgendeine Idee warum Datenbindungen nicht funktionieren würden? –