我在会话变量中浮动了一个DataTable,它与GridView相关联。
我已经在GridView中编写了一个删除按钮,该按钮调用一个删除该行的方法,如下所示
private void DeleteRecordByID(int ID)
{
DataTable dt = (DataTable)Session["tempPermissions"];
DataRow rowDelete = dt.Rows[ID];
dt.Rows.Remove(rowDelete);
}
我的DataTable中有两条测试记录从数据库加载。
我的问题是,当我点击记录上的删除时,我收到以下错误
System.IndexOutOfRangeException: There is no row at position 22.
即使DataTable中的记录ID为22 ..
有人知道为什么会这样吗?
答案 0 :(得分:4)
索引器期待行的索引,而不是 ID 。
您的行可能是
1
15
29
31
但索引只是0到3。
有几种方法可以在DataTable中查找行,从DataTable上的内置方法到使用LINQ。以DataTable为中心的方法是在表上定义主键列,例如
DataColumn idColumn = dt.Columns["ID"];
dt.PrimaryKey = new[] { idColumn };
这允许您使用DataTable.Rows.Find(object key)
方法检索您的行。
DataRow row = dt.Rows.Find(22);
如果给定键不存在行,则结果为null
。因此,在对输出执行任何操作之前验证null。
答案 1 :(得分:0)
请注意,您可能还需要在删除后执行GridView.DataBind()。