2009-08-26 4 views
0

J'ai une classe principale qui crée et remplit un DataSet et une instance de cette classe est ensuite passée aux sous-contrôles de mon application par référence. Je souhaite utiliser cet ensemble de données pour créer une base de données vers des composants, dans ce cas, une zone de liste. C'est pour une application de formulaires Windows..Net ListBack DataBinding Problème

Heres ce que je suis en train:

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

Remarque, j'ai aussi essayé ceci: (pas sûr s'il y a une différence)

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

Theres aucune erreur et je ne vois pas les données dans la listbox ... quand je produis synData.ds.Tables["ChannelTypes"].Rows.Count il me dit qu'il y a en fait des données dans cette datatable.

Ai-je raté quelque chose? J'ai aussi truit channelTypesLB.Refresh(); après le réglage de la liaison de données.

Cela peut aussi être utile ... c'est le code dans ma classe principale où l'ensemble de données est créé, pas sûr que sa peut-être un problème de portée, j'imagine que je l'aurais reçu une erreur:

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

Répondre

3

Essayez de régler DataSource du Listbox plutôt que de se lier à la propriété Text:

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

Je ne suis pas un expert en DataBinding par tout moyen, mais je crois que par databinding la façon dont vous faites actuellement ce contrôle lie à un PropertyManager qui est utilisé pour lier un val ue d'un objet à une valeur d'un autre. En définissant le DataSource, il doit se lier à un CurrencyManager qui est utilisé pour lier à un Collection.

Here's a quick overview of WinForms databinding

+0

Hrmm qui a fonctionné ... utilisé DisplayMember au lieu de DataMember ... Je préférerais le 1 revêtement d'utiliser DataBindings si –

+0

whoops, qui était une faute de frappe - pas un DataMember. Vous pouvez également construire un 'BindingSource', qui lui-même a un DataSource et DisplayMember (bien qu'ils soient accessibles via le constructeur je crois) et définir ListBox.DataSource = BindingSource – STW

+0

Merci de me pointer dans la bonne direction –

1

Je suppose WinForms ici car il n'y a pas de balise ASP.NET ...

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

Juste au cas où il est ASP.NET essayer si:

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

Oui, winforms. Une idée de pourquoi les databindings ne fonctionneraient pas? –