Ich habe eine Mehrfachauswahl-Listbox, die ich an eine DataTable binde. DataTable enthält 2 Spalten Beschreibung und Wert.
Hier ist der Listenfeld-Code:
%Vor%Ich setze eine Beschreibung als DisplayMember und Wert als ValueMember der ListBox. Jetzt, abhängig davon, was der Wert übergeben wird, muss ich das ausgewählte Element in der ListBox festlegen.
Hier ist mein Code:
%Vor%was nicht funktioniert. Daher muss ich auf den folgenden Code zurückgreifen (wo ich alle Elemente in der Listbox durchlaufe)
%Vor%Ich würde gerne wissen, was in meinem Code fehlt / fehlerhaft ist. Warum ist lb.SelectedValue = valuePassedByUser; falsche Artikel auswählen?
Ok ... hier kommt eine schwer zu verdauliche Antwort, die ich erst gestern bemerkt habe. Es ist jedoch mein Fehler, dass ich in meiner Frage kein wichtiges Thema erwähnt habe, weil ich es für problematisch gehalten habe:
Die Daten in der Datentabelle wurden nicht sortiert. Daher habe ich die Sorted-Eigenschaft der Listbox auf true festgelegt . Später wurde mir klar, wenn die sortierte Eigenschaft der Listbox oder sogar der Kombinationsbox auf true gesetzt ist, dann wird der value member nicht richtig gesetzt. Also wenn ich schreibe:
%Vor%Es setzt ein anderes Element als ausgewählt, anstatt dasjenige zu setzen, dessen Wert valuePassedByUser ist. Kurz gesagt, es verwirrt die Indizes.
Für z.B. wenn meine Ausgangsdaten sind:
%Vor%Und ich habe sorted = true gesetzt. Dann sind die Listbox-Elemente:
%Vor%Wenn ich jetzt Banana als ausgewählt einstellen möchte, starte ich den stmt:
%Vor%Aber anstatt Banana als ausgewählt auszuwählen, wird Orange als ausgewählt festgelegt. Warum? Weil die Liste nicht sortiert worden wäre, wäre der Index von Banana 4. Also, obwohl nach dem Sortieren des Index von Banana 2 ist, setzt er den Index 4 als ausgewählt, wodurch Orange statt Banana ausgewählt wird.
Daher verwende ich für sortierte Listbox den folgenden Code, um ausgewählte Elemente zu setzen:
%Vor%Ich denke, die einzige Möglichkeit, mehrere Elemente auszuwählen, besteht darin, eine foreach-Schleife zu verwenden. Die SelectedValue-Eigenschaft scheint nur 1 Element zurückzugeben. Wenn Sie mehr als 1 Element auswählen möchten, müssen Sie Folgendes verwenden:
%Vor%Auch FindStringExact durchsucht nicht die Wertfelder, sondern nur den angezeigten Text. Um Code zu reduzieren, könnte es auch sinnvoll sein, eine neue Variable als Listenfeld zu verwenden, damit Sie C nicht als Listbox darstellen.
Hier ist, wie ich es gelöst habe, mit Winforms, DotNet 4.6
%Vor% Wenn Sie keine Schleife für ausgewählte Elemente erstellen möchten, rufen Sie den ausgewählten Wert des Listenfelds aus dem listBox_SelectedIndexChanged
-Ereignis ab und fügen diesen Wert im globalen Array hinzu. Wenn Sie dann auf dieses Array zugreifen, erhalten Sie den gewünschten Wert für den Wert von itemlist
ohne eine Schleife.
Tags und Links c# listbox asp.net-2.0