Laden...

[gelöst] ComboBox Eintrag mit Tag?

Erstellt von FeelFlow vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.390 Views
F
FeelFlow Themenstarter:in
67 Beiträge seit 2010
vor 13 Jahren
[gelöst] ComboBox Eintrag mit Tag?

Kann man (und wenn ja --> wie?) an einen Eintrag in einer Combobox ein Tag hängen?
Die ComboBox als solches hat zwar eine Tag - Eigenschaft, aber anscheinend nicht die Items.

Gruß
Flo

2.187 Beiträge seit 2005
vor 13 Jahren

Hallo FeelFlow,

Die Items haben kein Tag. Wenn ich so etwas machen muss binde ich die ComboBox immer an IList<KeyValuePair<string,T>> (T der Typ der in das 'Tag' soll).
((Das geht nur über Umwege mit dem Designer, geht aber gut.))

Gruß
Juy Juka

F
FeelFlow Themenstarter:in
67 Beiträge seit 2010
vor 13 Jahren

Danke

Mein problem ist, dass ich zu jeden Comboboxeintrag eine ID habe und ich brauche die ID des ausgewählten Items.

Werde mich jetzt erstmal mit der IList beschäftigen, aber wenn noch jemand eine einfachere Idee hat, wär ich dankbar.

Gelöschter Account
vor 13 Jahren

Mein problem ist, dass ich zu jeden Comboboxeintrag eine ID habe und ich brauche die ID des ausgewählten Items.

am besten du hälst dir eine klasse vor, die die beiden werte miteinander verbindet.

eine möglichkeit ist keyvaluepair. der key ist ja die ID und die ID ist ja eindeutig, daher passt das ganz gut.

die liste ist nciht unbedingt notwendig. wichtig ist nur das du der combobox sagst, welche eigenschaft angezeigt werden soll. das geht über die Displaymember eigenschaft. da gibst du dann einfach "Value" an und fertig.

F
FeelFlow Themenstarter:in
67 Beiträge seit 2010
vor 13 Jahren

Okay hab ich soweit verstanden.

Aber:


KeyValuePair<int, string> kvp;
kvp.Key = intZahl;

liefert mir den Fehler, dass kvp.Key schreibgeschützt ist.

Gelöschter Account
vor 13 Jahren

liefert mir den Fehler, dass kvp.Key schreibgeschützt ist.

eigendlich sollte hier eine nullreferenceexception fliegen....

du musst im konstruktor diese werte setzen.

2.187 Beiträge seit 2005
vor 13 Jahren

Hallo FeelFlow,

Man (Ich) will dich ja nicht im Regen stehen lassen.
Ich würde dies wie folgt lösen:
(im Designer)

  1. BindingSource auf die Maske ziehe.
  2. BindingSource.Filter auf "a" setzen.
  3. Die [Form].Designer.cs in der Code-Ansicht öffnen
  4. Nach "a" suchen (mit Anführungszeichen).
  5. ".Filter = "a";" durch ".DataSourche = typeof(System.Collections.Generic.KeyValuePair<[[typ der id]],string>);" ersetzen.
  6. Wieder im Designer die ComboBox auswählen.
  7. Auf den kleinen Pfeil an der rechten Seite klicken.
  8. "An Daten gebundene Elemente verwenden" anhacken.
  9. die BindingSource als "Datenquelle" auwählen
  10. "Member Anzeigen" auf "Value" setzen (sollte im DropDown angeboten werden.

(im Code)

  1. DatenQuelle füllen:

IList<KeyValuePair<[[typ der id]],string>> liste = new List<KeyValuePair<[[typ der id]],string>>();
foreach(??? in ???)
{
  liste.Add(new KeyValuePair<[[typ der id]],string>(id,text));
}
this.bindingSource.DataSource = liste;

  1. DatenQuelle auswerten:

KeyValuePair<[[typ der id]],string> ausgewählt = (KeyValuePair<[[typ der id]],string>) this.bindingSource.Current;
[[typ der id]] id = ausgewählt.Key;
string text = ausgewählt.Value;

Gruß
Juy Juka

F
FeelFlow Themenstarter:in
67 Beiträge seit 2010
vor 13 Jahren

WOW... ich weine gleich X(. Vielen Dank für deine Mühe. Ich hatte mich schon drauf eingestellt, dass ich bis zum Abend an den problem sitze.

Aber ich muss ehrlich sein, daa wäre ich niemals drauf gekommen.

Deine Lösung klappt natürlich einwandfrei.

Danke auch an JAck30lena.

5.299 Beiträge seit 2008
vor 13 Jahren

Hi!

  
KeyValuePair<int, string> kvp;  
kvp.Key = intZahl;  
  

liefert mir den Fehler, dass kvp.Key schreibgeschützt ist.

eigendlich sollte hier eine nullreferenceexception fliegen....

das geschieht nicht, weil KVP eine Struktur ist, und kein Verweistyp (Klasse). Daher kann es nicht auf null verweisen, sondern ist immer initialisiert (defaultmäßig stehen lauter 0-Bytes im Speicher)

edit: war halbwahr. tatsächlich kommt die nullRef-Exception schon deshalb nicht, weil die Zuweisung syntaxwidrig ist, und daher gar nix kompiliert. So oder so:

du musst im konstruktor diese werte setzen.

KVP eignet sich als Structure auch nicht für anspruchsvollere Datenhaltung, da die Properties Key und Value nicht änderbar sind (und wären sie änderbar, würden Änderungen nur die Daten-Kopien betreffen, was ebenso unbrauchbar ist).

Wenn du bereits Objekte hast, mit einer ID und weiteren Properties, kannstedie ebensogut in eine BindingList stopfen, und eine Combo da anbinden.

Aber hier mal ein Demo mit KVPs, aber in VB:KeyValuePair als Datenobjekt

Der frühe Apfel fängt den Wurm.