Laden...

Dictionary an ComboBox binden

Erstellt von serial vor 16 Jahren Letzter Beitrag vor 15 Jahren 8.184 Views
S
serial Themenstarter:in
902 Beiträge seit 2007
vor 16 Jahren
Dictionary an ComboBox binden

Hallo,

wie kann ich eine Dictionary an eine Combobox binden, sodass dasDisplaymemeber den Key anzeigt, und der Tag(oder Valuemember) der Value ist?

Habe vieles probiert, aber es gelingt mir einfach nicht.

1.665 Beiträge seit 2006
vor 16 Jahren

in etwa so:

this.comboBox.DataSource = dictionary.Values;
this.comboBox.DisplayMember = "Text"; // Propertyname aus dem Value Objekt im Dictionary
this.comboBox.DataMember = "Text";
this.comboBox.ValueMember = "Tag";
F
10.010 Beiträge seit 2004
vor 16 Jahren

Bitte immer die DataSource am schluss.

Bei kleinen Listen macht das meist nichts aus, bei grossen listen, würdes Du jetzt 3 mal komplett binden.

1.665 Beiträge seit 2006
vor 16 Jahren

Korrekt. Und DataMember gibt's auch nicht 😉

War gerade beim UltraComboEditor bei dem man am Ende gemütlich BindData() aufruft.

S
serial Themenstarter:in
902 Beiträge seit 2007
vor 16 Jahren

irgenwie kapier ich das nicht, weiss nicht was ich als propertyname vergeben soll:

Ich zeig euch mal etwas code:


public Dictionary<string,int> Auswahl
{
get
{
 Dictionary<string,int> result = new Dictionary<string,int>();
 XmlDocument doc = new XmlDocument();
 doc.Load("CopySettings.xml");
 XmlElement elementTop = doc.DocumentElement;
 XmlNode nodeSub = elementTop.ChildNodes[0];
 foreach(XmlNode node in nodeSub.ChildNodes)
 {
   result.Add(node.InnerText,Convert.ToInt32(node.Attributes["Tag"].InnerText));
 }
}

}


und diese Property bekomm ich irgendwie nicht gebunden!
Im Endeffekt will ich, das in der ComboBox der Key anbgezeigt wird, und der Tag der Value ist.

1.665 Beiträge seit 2006
vor 16 Jahren

Versuch das mal:

this.comboBox.DisplayMember = "Keys";
this.comboBox.ValueMember = "Values";
this.comboBox.DataSource = dictionary;

"Keys" ist in dem Fall das Property auf dem Dictionary, in dem deine Keys enthalten sind, das selbe gilt für Values, wo du deine int hast.

S
serial Themenstarter:in
902 Beiträge seit 2007
vor 16 Jahren

diese Property ist in einer anderen Klasse, möchte ich diese Property dann an das DataSource hängen, bringt er meldung das nur IList und IList<> unterstützt wird!

Wenn ich über BindingSource gehe kan ich es binden, allerdings funktioniert das mit den "Value" und "Key" nicht!?!

5.299 Beiträge seit 2008
vor 16 Jahren

diese Property ist in einer anderen Klasse, möchte ich diese Property dann an das DataSource hängen, bringt er meldung das nur IList und IList<> unterstützt wird!

So isses halt. Dictionary implementiert keine IList-Schnittstelle, und ist daher als DataSource untauglich.

Du kannst die Dictionary-Entries in eine List(Of KeyValuePair(Of T,T2)) überführen, und daran binden


this.comboBox.DisplayMember = "Keys";
this.comboBox.ValueMember = "Values";
List< KeyValuePair<T,T2>> Src = new List< KeyValuePair<T,T2>>(dictionary);
this.comboBox.DataSource = Src;

Der frühe Apfel fängt den Wurm.

D
67 Beiträge seit 2006
vor 15 Jahren

Ich habe das gleiche Problem und stehe auf dem Schlauch.

Mein Dictionary besteht aus einem Schlüssen (UniqueKey) und einem Klasse (Type).

public class Evaluations : Dictionary<UniqueKey, Type

In der ComboBox soll folgendes angzeigt werden?


this.comboBox.DisplayMember = "Keys"; // bei mir UniqueKey
this.comboBox.ValueMember = "Values"; // bei mir Type.Display

Wie funktioniert der Weg über die Konvertierung?


List< KeyValuePair<T,T2>> Src = new List< KeyValuePair<T,T2>>(dictionary);