我目前正在尝试移动用户添加到列表框中的所有值,但是,我想要检索列表框中每个项目的实际值,而不是文本。
到目前为止,我已经使用了下面的代码,但这只得到了文本,而不是值。
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
我如何获取集合中每个项目的价值?
答案 0 :(得分:5)
item
是一个ListItem
对象 - 而不是在其上调用ToString
,您应该使用Text
和Value
属性来获取所需的信息
答案 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循环进行反向,但这是另一个主题:)