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.
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";
> Codejunky <
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.
Korrekt. Und DataMember gibt's auch nicht 😉
War gerade beim UltraComboEditor bei dem man am Ende gemütlich BindData() aufruft.
> Codejunky <
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.
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.
> Codejunky <
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!?!
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.
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);