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()
答案 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位没有行。