2

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

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

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

4 回答 4

5

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

于 2010-01-11T14:15:58.310 回答
1

使用 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)
于 2012-04-10T13:55:48.483 回答
0

你有没有尝试过:

item.Value
于 2010-01-11T14:17:55.007 回答
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 循环反向进行,但这是另一个主题 :)

于 2010-01-11T14:20:09.660 回答