循环浏览时,如何获取列表框中的所有值?

时间:2010-01-11 14:11:13

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

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

到目前为止,我已经使用了下面的代码,但这只得到了文本,而不是值。

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 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

使用VB 2010,请注意要获取列表框中项目的实际值,您需要使用ListBoxItem对象的“Content”属性。例如:

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)

答案 2 :(得分:0)

你试过了吗?

item.Value

答案 3 :(得分:0)

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