尝试从DataTable中删除行时出现问题

时间:2011-04-19 01:32:16

标签: c# asp.net datatable datarow

我在会话变量中浮动了一个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 ..

有人知道为什么会这样吗?

2 个答案:

答案 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()。