Stackflow上有关于如何将ListBox项添加到会话然后将项重新填充回ListBox的示例,但由于某种原因它无法正常工作。
这是代码段
Private Sub btnSelect_Click(sender As Object, e As EventArgs) Handles btnSelect.Click
If lstFields.SelectedIndex >= 0 Then
For i As Integer = 0 To lstFields.Items.Count - 1
If lstFields.Items(i).Selected Then
If Not arrayFields.Contains(lstFields.Items(i)) Then
arrayFields.Add(lstFields.Items(i))
Session("items") = arrayFields
End If
End If
Next
For i As Integer = 0 To arrayFields.Count - 1
If Not lstSelected.Items.Contains((CType(arrayFields(i), ListItem))) Then
lstSelected.Items.Add((CType(arrayFields(i), ListItem)))
End If
lstFields.Items.Remove((CType(arrayFields(i), ListItem)))
Next
lstSelected.SelectedIndex = -1
End Sub
当我尝试使用For Each循环将项目重新填充回ListBox时,我不断使用VS 2015的错误显示:
FocusVB.dll中出现'System.InvalidCastException'类型的异常,但未在用户代码中处理
其他信息:无法将“System.Web.UI.WebControls.ListBox”类型的对象强制转换为“System.Collections.IEnumerable”。
以下是每个循环的片段:
For Each item As ListItem In Session("item")
lstSelected.Items.Add(New ListItem(item.Text, item.Value))
Next
我错过了代码中的某个地方吗?
答案 0 :(得分:1)
只需从第ListItem
行
For each item as listitem
即可
For Each item In Session("item")
lstSelected.Items.Add(New ListItem(item.Text,item.Value)) 下一步
不要问我为什么,而是阅读this。看看它的命名空间,它会回答你(如果你不是在谈论System.Windows.Documents.listItem
)
答案 1 :(得分:1)
您的枚举列表包含会话("项目")= arrayFields
但是,您的参考是项目,而不是项目。更改为项目。
If Not Session("items") Is Nothing Then
For Each item As ListItem In Session("items")
lstSelected.Items.Add(New ListItem(item.Text, item.Value))
Next
End If