下一个循环不会结束,它会使索引超出范围

时间:2013-08-10 07:15:00

标签: vb.net

我有5列,我必须删除我的数据库中已存在的行,以便我的数据库中不存在的剩余行已准备好插入数据库..但仍然我有一个错误的索引已经范围。必须是非负数且小于集合的大小。 参数名称:index ..

问题是,即使datagridview的lastrow已经达到,下一个循环也不会结束..

我已将allowusertoaddrows的属性设置为false ..

这是我的代码..

Private Sub btnCheck_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCheck.Click
        Dim rctr, x As Integer

        Dim con As SqlConnection = New SqlConnection("Server=ITS-CODER02\DIBMART; Initial Catalog = HiKLotMgt; User Id= sa; Password = evadkram!@#;")
        con.Open()

        For x = 0 To gridhik.Rows.Count - 1

            cerlotno = gridhik.Item(2, x).Value
            sqlexist = "Select * from tblHikLotMgtDB where CeramicLotNo = '" & cerlotno & "'"
            Dim cmd1 As SqlCommand = New SqlCommand(sqlexist, con)
            Dim rdr As SqlDataReader = cmd1.ExecuteReader

            If rdr.HasRows Then
                MsgBox("Ceramic Lot No: " + cerlotno + " already exists and will be deleted.", vbInformation)

                gridhik.Rows.Remove(gridhik.Rows(x))
                x = x - 1
            End If

            rdr.Close()
        Next
        MsgBox("Ready for Saving....", vbInformation)
    End Sub

提前感谢那些帮助的人......谢谢......

1 个答案:

答案 0 :(得分:1)

假设网格最初有10行,0-9。 您正在删除循环中的网格行,这意味着不再有原始的10行,因此最后一行现在是(8),并且(9)不再存在;这就是为什么你的索引超出范围错误。 重构你的循环,使它从最后一行开始并向下收起,即对于x = gridhik.Rows.Count - 1到0步-1 -