0

System.IndexOutOfRangeException:位置 5 处没有行。

我的应用程序中有以下代码块。这是为了使我能够从网格视图中删除行,而无需从数据库中完全删除相同的行!

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

这是我遇到的错误!

System.IndexOutOfRangeException:位置 5 处没有行。

注释的 catch exeption 稍微解决了这个问题。

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()
4

2 回答 2

0

你的问题可能在这里:

 dt.Rows.RemoveAt(dr.RowIndex)

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

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

于 2013-01-26T16:39:21.230 回答
0

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

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

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

删除第一(索引 0)后:

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

删除第 3(索引 2)后:

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

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

于 2013-01-26T16:45:13.117 回答