2016-07-11 13 views
1

Ich verwende eine Listbox auf meiner Windows-Anwendung. Die Listbox hat eine Mehrfachauswahlmöglichkeit, bei der Benutzer alle Rollen auswählen, die der neue Benutzer haben wird. Meine Listbox ist an ein Dataset gebunden. Die Tabelle enthält Rollen mit einer ID-Spalte und einer Beschreibungsspalte. Wenn ich die listbox gebunden, wählte ich die Datenquelle die Datenmenge ist, wobei das Anzeigeelement die Beschreibung, der Wert Element, der die ID und der ausgewählte Wert ist, den Datensatz zu sein - roles.frolesid enter image description hereSo erhalten Sie mehrere ausgewählte Werte aus der Listbox C# Windows-Anwendung

Wenn nun i loop Durch die ausgewählten Items der Listbox erhalte ich nur die Werte des ersten Items usw.

Ich versuche dem aktuell ausgewählten Wert einen int zuzuordnen, um die ID an den Benutzer zu übergeben.

Wenn ich also 3 Rollen auswähle, zum Beispiel Administrator, Capturer und Assessor, sehe ich nur den Administrator-Wert.

Wie schleife ich und greife auf das nächste Element zu? Ich verwende nicht einmal

item2 in meinem Code. Könnte dies genutzt werden?

Zum Beispiel:

enter image description here

Erste Iteration:

enter image description here

Und es bleibt einfach auf das ausgewählte Element, nie zum nächsten Punkt zu bewegen.

+0

Sie verwenden es bereits. "lstRoles.SelectedItems". Wenn Sie die Iteration bis zum Ende ausführen, können Sie "Administrator, Assessor, Capturer" –

+0

nicht tatsächlich sehen. wenn ich durch gehe, bleibt es auf Administrator –

+0

versuche "lstRoles.SelectedItems.Count", es muss 3 –

Antwort

0

es gelöst

  int num = 0; 
      int count = fRoleIDs.Count; 
      while (num != count) 
      { 
       var item = lstRoles.Items[num] as System.Data.DataRowView; 
       int id = Convert.ToInt32(item.Row.ItemArray[0]); 
       num += 1; 
      } 

Das geht in die Angebote des listbox und nach dem Index wird das Element als Row. Dies wird mir dann die ItemArray, die ID und Beschreibung ist {0,1}

+1

Item eines 'ListBox'-Steuerelements kann' DataRowView' sein, komplexe Objekte, anonyme Typen, primäre Typen und andere Typen. Der zugrunde liegende Wert eines Gegenstandes sollte auf der Basis von "ValueMember" berechnet werden. Du Mann finde [diesen Beitrag] (http://stackoverflow.com/a/38305363/3110834) hilfreich. –

1

Zur Liste der ausgewählten Werte zu erhalten, wenn die Datenquelle ein DataTable ist, können Sie diesen Code verwenden können:

var selectedValues = listBox1.SelectedItems.Cast<DataRowView>() 
          .Select(dr => (int)(dr[listBox1.ValueMember])) 
          .ToList(); 

Aber in Allgemeines Element eines ListBox Steuerelements kann DataRowView, komplexe Objekte, anonyme Typen, Primärtypen und andere Typen sein. Der Basiswert eines Artikels sollte basierend auf ValueMember berechnet werden.

Wenn Sie nach einer guten Lösung suchen, die mit verschiedenen Einstellungen und verschiedenen Datenquellen funktioniert, finden Sie möglicherweise this post hilfreich. Es enthält eine Erweiterungsmethode, die den Wert eines Elements zurückgibt. Es funktioniert wie GetItemText Methode von ListBox.