You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从DataTable中删除多行数据并保存变更

如何在DataTable中删除指定范围的多行数据

注意:DataTable行索引默认从0开始,你提到的第10行对应索引9、第35行对应索引34,可根据自身实际场景调整起始、结束索引的数值

核心注意点

  • 不要正向遍历删除:删除靠前的行后,后续行的索引会自动前移,会出现删错行、漏删的问题
  • 不需要同步变更到数据库的场景,删除完成后直接调用AcceptChanges()即可保存变更;如果后续要通过DataAdapter同步到数据库,不要提前调用AcceptChanges(),避免丢失行变更标记导致无法同步
  • 所有删除操作都建议增加索引合法性判断,避免DataTable行数不足时触发索引越界报错

实现方法

方法1:倒序遍历删除(最简单高效,适合不需要校验行内容的场景)

// 定义要删除的索引范围,示例对应第10行到第35行
int startIndex = 9;
int endIndex = 34;

// 从最大的索引开始倒序删,不会影响未处理的小索引准确性
for (int i = endIndex; i >= startIndex; i--)
{
    if (i >= 0 && i < dataTable.Rows.Count)
    {
        dataTable.Rows.RemoveAt(i);
    }
}

// 保存变更到DataTable
dataTable.AcceptChanges();

方法2:先收集要删除的行再批量删除(适合需要先校验行内容的场景)

int startIndex = 9;
int endIndex = 34;
List<DataRow> rowsToDelete = new List<DataRow>();

// 先把符合要求的行存入临时列表,不会触发索引偏移
for (int i = startIndex; i <= endIndex; i++)
{
    if (i >= 0 && i < dataTable.Rows.Count)
    {
        // 这里可以加自定义校验逻辑,判断行是否符合删除条件
        rowsToDelete.Add(dataTable.Rows[i]);
    }
}

// 批量删除收集到的行
foreach (DataRow row in rowsToDelete)
{
    dataTable.Rows.Remove(row);
}

// 保存变更
dataTable.AcceptChanges();

优化技巧

如果DataTable绑定了UI控件,删除期间可以先调用dataTable.BeginLoadData()暂停数据通知,删除完成后调用dataTable.EndLoadData()恢复通知,避免UI频繁刷新产生卡顿。

内容的提问来源于stack exchange,提问作者FAST2021

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:54:03