Wie kann ich alle die Werte in einem Listenfeld erhalten, wenn durch sie Looping?
-
19-09-2019 - |
Frage
Ich versuche zur Zeit durch alle Werte in eine Listbox vom Benutzer hinzugefügt zu bewegen, aber ich den tatsächlichen Wert der einzelnen Elemente in der Listbox abrufen möchten und nicht den Text.
Ich habe unten so weit mit dem Code bekommen, aber das wird nur den Text und nicht der Wert.
For Each item In SelectedStoresLB.Items
Dim tCompany As Integer = CInt(Left(item.ToString, 1))
Dim tStore As String = Right(item.ToString, 3)
Dim tReason As String = ReasonTxt.Text
insertSQL = "INSERT INTO [CommsDownLog] ([DimCompanyID],[PervasiveStoreNumber],[DownReason]) VALUES (" & tCompany & ", '" & tStore & "', '" & tReason & "')"
Dim insertRow = New SqlCommand(insertSQL, objConn)
Try
objConn.Open()
insertRow.ExecuteNonQuery()
objConn.Close()
Catch ex As Exception
Response.Write(ex)
End Try
Next
Wie würde ich mich über den Wert für jedes Element in der Sammlung zu bekommen?
Lösung
item
ist ein ListItem
Objekt -. Anstatt Anruf ToString
drauf, sollten Sie die Text
und Value
Eigenschaften verwenden, um die Informationen die Sie benötigen
Andere Tipps
Mit VB 2010, notieren Sie die aktuellen Werte der Elemente in der Listbox Sie den „Inhalt“ Eigentum des ListBoxItem Objekt verwenden müssen, erhalten. Zum Beispiel:
For i As Integer = 0 To lstSortUs.Items.Count - 1
sAllItems &= lstSortUs.Items(i).Content & ";"
Next
sAllItems = Left(sAllItems, Len(sAllItems) - 1)
arrAllItems = sAllItems.Split(";")
System.Array.Sort(arrAllItems)
Haben Sie versucht:
item.Value
Sie müssen vorsichtig sein, wenn das Iterieren über eine List-Box, weil Sie die zugrunde liegende Auflistung modifizieren können am Ende. Durch die Verwendung von foreach, wie Sie sind, werden Sie nutzen den darunter liegenden enumerator. Ich empfehle Ihnen, Ihre Iterator auf das folgende (C # Beispiel) ändern:
foreach (ListItem li in listbox.Items.ToArray())
{
if (li.Selected)
{
Controltest2.Remove(li.Value);
}
}
Auf diese Weise sind Sie die Sammlung des Array ändern und nicht die Sammlung der Liste. Dies setzt voraus, LINQ
zu Objekt und Sie können Anruf Cast<t>
müssen es in einigen Fällen zu arbeiten.
Der Grund hierfür ist unter:
Die foreach-Anweisung wiederholt eine Gruppe von eingebetteten Anweisungen für jeden Element in einem Array oder ein Objekt Sammlung. Die foreach-Anweisung ist iterieren durch die Sammlung verwendet die gewünschten Informationen, zu bekommen, aber sollte nicht verwendet werden, die sich ändern Inhalt der Sammlung zu vermeiden unvorhersehbare Nebenwirkungen
Quelle: MSDN
Um den Text, den Sie nach Iterieren wollen, verwenden .Value
statt .Text
. Natürlich gibt es andere Möglichkeiten, um Iterierte wie mit einem rückwärts geht für Schleife indiziert, aber das ist ein anderes Thema:)