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

本文关键字:问题 删除行 DataTable | 更新日期: 2023-09-27 17:50:26

我有一个数据表浮动在会话变量,这是绑定到GridView。

我已经在GridView中编写了一个Delete按钮,它调用了一个方法来删除该行,如下所示

private void DeleteRecordByID(int ID)
{
    DataTable dt = (DataTable)Session["tempPermissions"];
    DataRow rowDelete = dt.Rows[ID];
    dt.Rows.Remove(rowDelete);
}

我有两个测试记录坐在我的数据表从数据库加载。

我的问题是,当我点击删除记录,我得到以下错误

System.IndexOutOfRangeException: There is no row at position 22.

即使在DataTable中有一条ID为22的记录…

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

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

索引器期望得到该行的索引,而不是ID

你的行可以是

1
15
29
31

但是索引只有0到3。

在数据表中查找行有几种方法,从数据表的内置方法到使用LINQ。以数据表为中心的方法是在表上定义一个主键列,例如

DataColumn idColumn = dt.Columns["ID"];
dt.PrimaryKey = new[] { idColumn };

这允许您使用DataTable.Rows.Find(object key)方法来检索您的行。

DataRow row = dt.Rows.Find(22);

如果给定的键不存在行,结果将是null。因此,在对输出执行任何操作之前,请对null进行验证。

请注意,您可能还需要在删除后执行GridView.DataBind()。