获取System.InvalidOperationException:Listbox DataSource VB.net

时间:2017-06-03 03:14:44

标签: vb.net listbox

这是我得到的错误

System.InvalidOperationException: 'List that this enumerator is bound to has been modified. An enumerator can only be used if the list does not change.'

我有一个数据包的列表框项目列表存储在天数表中,保存的值存储在记录表中。该清单是逗号分隔清单E.G:1,2,3,4,5 等于加载时选择值为1-5的项目。

这是完美运行的保存例程

Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.Leave
    Dim listboxItems As New List(Of String)

    For Each row As DataRowView In ListBox1.SelectedItems
        listboxItems.Add(row("IDNum"))

    Next row
    selectLoad = True
    lblDays.Text = String.Join(",", listboxItems.ToArray())

End Sub

这是抛出错误的例程。

Private Sub BGWLoadData_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BGWLoadData.RunWorkerCompleted

        Dim TextBoxStrings() As String = {""}


    Try
        Dim TempStr() As String = lblDays.Text.Split(",")
        ReDim TextBoxStrings(TempStr.Count - 1)
        TextBoxStrings = TempStr
    Catch ex As Exception

    End Try
    Dim TextBoxDoubles(TextBoxStrings.Count - 1) As Double
    For a As Integer = 0 To TextBoxStrings.Count - 1
        Try
            TextBoxDoubles(a) = TextBoxStrings(a)
        Catch ex As Exception
            TextBoxDoubles(a) = 0
        End Try
    Next

    Do While DaysBound = False
        Application.DoEvents()
    Loop

    ListBox1.SelectedItems.Clear()
    Dim TempIndex As Integer = 0
    For Each row As DataRowView In ListBox1.Items
        For a As Integer = 0 To TextBoxDoubles.Count - 1
            If row("IDNum") = TextBoxDoubles(a) Then
                ListBox1.SetSelected(TempIndex, True)
            End If
        Next
        TempIndex = TempIndex + 1
    Next row
End Sub

我做错了什么或者可以采取哪些措施来提高代码效率。

编辑: 下一行发生错误。 还告诉我,我做错了什么都没有用,我知道有些事情是错的,因为我收到了错误。我要的是如何用代码片段或其他东西解决这个问题。

1 个答案:

答案 0 :(得分:0)

这已通过添加第二个档案解决了

If selectLoad = False Then

        ' convert CSV of IDNums of selected items in listbox into string array
        Dim TextBoxStrings() As String = {""}
        Try
            Dim TempStr() As String = lblDays.Text.Split(",")
            ReDim TextBoxStrings(TempStr.Count - 1)
            TextBoxStrings = TempStr
        Catch ex As Exception
        End Try

        ' convert string array to double array
        Dim TextBoxDoubles(TextBoxStrings.Count - 1) As Double
        For a As Integer = 0 To TextBoxStrings.Count - 1
            Try
                TextBoxDoubles(a) = TextBoxStrings(a)
            Catch ex As Exception
                TextBoxDoubles(a) = -1
            End Try
        Next

        ' load underlying IDNums into temporary array
        Dim TempIndex As Integer = 0
        Dim TempIDNums(ListBox1.Items.Count - 1) As Integer
        For Each row As DataRowView In ListBox1.Items
            TempIDNums(TempIndex) = row("IDNum")
            TempIndex = TempIndex + 1
        Next row

        ' if any of the underlying IDNums are found in the CSV, select that item in the listbox
        ListBox1.SelectedItems.Clear()
        For ListItemCounter As Integer = 0 To TempIDNums.Count - 1
            For SelectedItemCounter As Integer = 0 To TextBoxDoubles.Count - 1
                If TempIDNums(ListItemCounter) = TextBoxDoubles(SelectedItemCounter) Then
                    ListBox1.SetSelected(ListItemCounter, True)
                End If
            Next
        Next
    End If