System.IndexOutOfRangeException:位置5没有行?

时间:2013-01-26 16:33:43

标签: gridview datatable

System.IndexOutOfRangeException:位置5没有行。

我的应用程序中有以下代码块。这是为了使我能够从gridview中删除行而不从数据库中删除相同的行!

问题是当我按特定顺序选择或超过3时,我能够删除值但不能删除所有值!

这是我遇到的错误!

System.IndexOutOfRangeException:位置5没有行。

注释捕获剂可以稍微解决问题。

Dim strQuery As String = "SELECT UserId, staffNo, forename, surname FROM userProfilesTbl WHERE st_id=@st_id AND wa_id=@wa_id ORDER BY surname ASC "
        Dim cmd As New SqlCommand(strQuery)
        cmd.Parameters.AddWithValue("@st_id", myLblSt.Value().ToString)
        cmd.Parameters.AddWithValue("@wa_id", myLblWa.Value().ToString)

        Dim dt As DataTable = GetDataConn(cmd)
        'Try
        For Each dr In GridView1.Rows

            Dim chkBox As CheckBox = dr.FindControl("RowLevelCheckBox")

            If chkBox.Checked = True Then

                dt.Rows.RemoveAt(dr.RowIndex)
                dt.AcceptChanges()

            End If
        Next
        'Catch ex As Exception

        'End Try
        GridView1.DataSource = dt
        GridView1.DataBind()

2 个答案:

答案 0 :(得分:0)

你的问题可能就在这里:

 dt.Rows.RemoveAt(dr.RowIndex)

这将删除集合,因此在下一次迭代中,dr中的行索引不再有效。

您希望从较高的RowIndex值转到较低的RowIndex值以避免此问题。

答案 1 :(得分:0)

这可能是由于您删除行时其他索引正在更新的原因。例如,如果您有5行,并且希望删除第1,3和5行(索引0,2,4)。

因此,我们假设以下是您的数据网格:

Index|Data
0--------A
1--------B
2--------C
3--------D
4--------E

删除1 st 行(索引0)后:

Index|Data
0--------B
1--------C
2--------D
3--------E

删除3 rd 行(索引2)后:

Index|Data
0--------B
1--------C
3--------E

现在,如果您尝试删除5 th 行(索引4),您将获得System.IndexOutOfRangeException因为第4位没有行。