Как получить все значения в списке при их циклическом просмотре? - PullRequest
2 голосов
/ 11 января 2010

В настоящее время я пытаюсь просмотреть все значения, добавленные пользователем в список, однако я хочу получить фактическое значение каждого элемента в списке, а не текст.

Я дошел до кода ниже, но он получает только текст, а не значение.

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

Как мне получить значение для каждого элемента в коллекции?

Ответы [ 4 ]

5 голосов
/ 11 января 2010

item - это объект ListItem - вместо вызова ToString для него вы должны использовать свойства Text и Value, чтобы получить необходимую информацию.

1 голос
/ 10 апреля 2012

Используя VB 2010, обратите внимание, что для получения фактических значений элементов в списке необходимо использовать свойство «Content» объекта ListBoxItem. Например:

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)
0 голосов
/ 11 января 2010

Вы должны быть осторожны при переборе ListBox, потому что вы можете изменить базовую коллекцию. Используя foreach таким, какой вы есть, вы используете базовый перечислитель. Я рекомендую вам изменить ваш итератор следующим образом (пример C #):

foreach (ListItem li in listbox.Items.ToArray())
{
    if (li.Selected)
    {
        Controltest2.Remove(li.Value);
    }
}

Делая это, вы изменяете коллекцию Array, а не коллекцию списка. Это предполагает LINQ для объекта, и вам может потребоваться вызвать Cast<t>, чтобы заставить его работать в некоторых случаях.

Причина этого ниже:

Оператор foreach повторяет группу вложенных утверждений для каждого элемент в массиве или объекте коллекция. Утверждение foreach используется для перебора коллекции чтобы получить нужную информацию, , но не должны использоваться для изменения содержимое коллекции, чтобы избежать непредсказуемые побочные эффекты

Источник: MSDN

Чтобы получить нужный текст после итерации, используйте .Value вместо .Text. Конечно, есть и другие способы итерации, такие как обратный цикл с индексированным циклом for, но это уже другая тема:)

0 голосов
/ 11 января 2010

Вы пробовали:

item.Value
...