从数据表 C# 中删除特定行

Removing certain row from datatable C#

我正在尝试从数据表中删除某个单元格为空的行。我试过使用 for 循环但无济于事。

for (int i = dtbl.Rows.Count - 1; i >= 0; i--)
        {
           DataRow dr = dtbl.Rows[i];
            if (dr["id"] == null)
               dtbl.Rows.Remove(dr);
        }

如果 ID 列的单元格为空,则应删除该行。 任何帮助表示赞赏。提前致谢。

您可以使用 linq 来 select 那些不为空的

   dtbl = dtbl.AsEnumerable()
         .Where(r => r.Field<string>("id") != null)
         .CopyToDataTable();

可能需要类型,指定要比较的可空类型 row.Field<int?>("id").HasValue

将你的测试改为这个。

for (int i = dtbl.Rows.Count - 1; i >= 0; i--)
{
    DataRow dr = dtbl.Rows[i];
    if (dr.IsNull("id"))
        dtbl.Rows.Remove(dr);
}

查看文档:DataRow.IsNull

或者您可以对特殊字段进行检查 DbValue.Null

if (dr["id"] == DbNull.Value)

另一种方法是这个

for (int i = dtbl.Rows.Count - 1; i >= 0; i--)
{
    DataRow dr = dtbl.Rows[i];
    if (dr.IsNull("id"))
        dr.Delete();
}
dtbl.AcceptChanges();  

最后一个仅标记要删除的行,但该行仍保留在 table 中,直到您调用 AcceptChanges。 (所以这个方法是 suitable for a foreach loop)
如果您计划稍后更新真实数据库 table,则调用 DataRow.Delete 是首选工作方式(例如,当您希望您的用户从绑定网格中删除许多行,然后进行一次更新以仅当用户单击“保存”按钮时才打开数据库)。