【问题标题】:How do I get all the values in a listbox when looping through them?循环遍历列表框中的所有值时,如何获取它们?
【发布时间】:2010-01-11 14:11:12
【问题描述】:

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

到目前为止,我已经了解了下面的代码,但它只获取文本而不是值。

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

我将如何获取集合中每个项目的值?

【问题讨论】:

    标签: asp.net listbox asp.net-2.0 listbox-control


    【解决方案1】:

    item 是一个 ListItem 对象 - 而不是在其上调用 ToString,您应该使用 TextValue 属性来获取您需要的信息。

    【讨论】:

      【解决方案2】:

      使用 VB 2010,请注意要获取列表框中项目的实际值,您需要使用 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)
      

      【讨论】:

        【解决方案3】:

        你试过了吗:

        item.Value
        

        【讨论】:

        • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
        • 嗯...你确定这不是一个正确的答案吗?因为item.Value 确实会获得价值......
        【解决方案4】:

        迭代 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 循环反向进行,但这是另一个主题:)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-12-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-09
          • 2016-11-28
          • 1970-01-01
          相关资源
          最近更新 更多