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?

War es hilfreich?

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:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top