代码之家  ›  专栏  ›  技术社区  ›  LiamGu

当循环遍历列表框时,如何获取列表框中的所有值?

  •  2
  • LiamGu  · 技术社区  · 15 年前

    我目前正在尝试遍历用户添加到列表框中的所有值,但是,我希望检索列表框中每个项目的实际值,而不是文本。

    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 回复  |  直到 15 年前
        1
  •  5
  •   Ray    15 年前

    item 是一个 ListItem 对象-而不是调用 ToString Text Value

        2
  •  1
  •   Matt Campbell    13 年前

    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)
    
        3
  •  0
  •   Sani Huttunen    15 年前

    您是否尝试过:

    item.Value
    
        4
  •  0
  •   user195488 user195488    15 年前

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

    通过这样做,您可以修改数组的集合,而不是列表的集合。这假设 LINQ 若要反对,您可能需要调用 Cast<t>

    原因如下:

    foreach语句重复一个组 为每个 数组或对象中的元素 为了获得所需的信息, 但是 不应用于更改 要避免的集合内容 不可预测的副作用

    MSDN

    要在迭代后获得所需的文本,请使用 .Value 而不是 .Text . 当然,还有其他的迭代方法,比如使用索引for循环进行反向迭代,但这是另一个主题:)