在C#中,如果要删除DataTable中的某一行,大约有以下几种办法:

1,使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(index);可以直接删除行

2,datatable.Rows[i].Delete()。Delete()之后需要datatable.AccepteChanges()方法确认完全删除,因为Delete()只是将相应列的状态标志为删除,还可以通过datatable.RejectChanges()回滚,使该行取消删除。

在删除DataTable中的行的时候,每删除一行,DataTable中所有行的索引都会发生改变。在循环删除DataTable.Row的时候不能使用foreach。使用foreach进行循环的时候,是不允许Table有删除和添加操作的。
如果是按某列为条件进行删除,则每删完一行,整个Table的index就会立即发生变化,等于Table已经变成了一个新的表。但是索引却已经加1了。于是会造成第一列永远匹配不到。因此,每删除完一行,要跟着判断第一行是否满足删除条件。

=========================================================

如果要删除DataTable中的多行,应该采用倒序循环DataTable.Rows。因为正序删除时索引会发生变化。

for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
          dtOGBHIS.Rows.RemoveAt(i);
 }

总结:

delete和remove

Delete的使用是 datatable.Rows[i].Delete();

Remove的使用是datatable.Rows.Remove(datatable.Rows[i]);

这两个的区别是,使用delete后,只是该行被标记为deleted,但是还存在,用Rows.Count来获取行数时,还是删除之前的行数.需要使用datatable.AcceptChanges()方法来提交修改.

而Remove方法则是直接删除.

如果在for循环里删除行的话,最好是使用delete方法,不然会出现count变化的情况.循环完后再使用AcceptChanges()方法提交修改,删除掉标记为deleted的行

循环删除DataTable.Row中的多行问题的更多相关文章

  1. 一定要 先删除 sc表 中的 某元组 行,,, 再删除 course表中的 元组行

    一定要  先删除 sc表 中的  某元组   行,,, 再删除  course表中的  元组行 course表 SC表 删除  course表中的  元组行,,出现错误 sc    ---->参 ...

  2. uniq - 删除排序文件中的重复行

    总览 (SYNOPSIS) ../src/uniq [OPTION]... [INPUT [OUTPUT]] 描述 (DESCRIPTION) 从 INPUT (或 标准输入) 数据 中 忽略 (但是 ...

  3. Python3基础 使用for循环 删除一个列表中的重复项

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  4. 使用LinkedList类生成一个集合对象,循环加入“小样1”,“小样2”,“小样3”,“小样4”,“小样5”……“小样100”。输出这个集合的大小。再使用循环删除这个集合中所有名字为偶数的对象,比如“小样6”,“小样100”,都是偶数名。最后:循环输出集合中所有的对象,看是否删除成功。

    package com.lanxi.demo1_8; import java.util.Iterator; import java.util.LinkedList; public class Test ...

  5. 去掉DataTable列中的重复行

    DataTable  dt = ds.Tables[0];    //获得 DataTable  DataView dv = new DataView(dt);DataTable dt2 = dv.T ...

  6. 删除C代码中的注释行【状态机】

    今天在学ruby时遇到的一个经典的题目,一直都知道但从来没有实现过.呈上状态机,代码略.(写代码的时候还是需要注意一些小情况的)

  7. 如何删除datatable中的一行数据

    在C#中,如果要删除DataTable中的某一行,大约有以下几种办法: 1,使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(ind ...

  8. vim技巧4 删除/保留文本中匹配行

    vim技巧:如何删除/保留文本中特定的行呢? <ol><a href="/ss/ss/www"> show invisibles</a> < ...

  9. C# 往Datatable中添加新行的步骤

    以一个实例说明 //录入年份绑定 public void YearList(FineUIPro.DropDownList ddlYear) { //年份从15年到当前年//起止年份 ; int yea ...

随机推荐

  1. python 函数名,闭包

    1.函数名字的应用 函数名是什么? 函数名是函数的名字,本质:变量,特殊变量 函数名+() ———>执行此函数: 2.函数名的赋值: def func2(): print(44) f = fun ...

  2. Oracle事务的隔离

    事务是指一些列操作的集合,它有4个属性:原子性(Automacity).一致性(Consistency).隔离性(Isolation)和持久性(Durability),这4个属性简称为ACID.原子性 ...

  3. bootstrapSwitch 使用

    1.bootstrapSwitch 默认选项,加上checked表示true,不加表示false <input type="checkbox" id="" ...

  4. Regex正则表达式

    正则表达式 热身 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. 例如 g ...

  5. 【转】Jmeter和LR上传文件和下载

    背景: 在某个申请业务中,需要上传附件文件,然后才能提交该申请 遇到的问题: 1,  在使用Jmeter或者LR进行录制时,无法录制到上传文件的请求,只能通过Fiddler能查看到该请求 2,  因为 ...

  6. java里的switch循环--你妹考试落榜了

    总结:switch循环,不用break.那么程序每一个case都会运行到,直到遇到break停止 package com.aa; //格子区域 //3行3列的格子 public class Bu { ...

  7. 阿里云OSS图片上传类

    1.阿里云基本函数 /** * 把本地变量的内容到文件 * 简单上传,上传指定变量的内存值作为object的内容 */ public function putObject($imgPath,$obje ...

  8. Centos 6.* / 7.*下通过yum安装php7

    查看 centos 版本 # cat /etc/centos-release 删除之前的 php 版本 # yum remove php* php-common rpm 安装 Php7 相应的 yum ...

  9. IDEA实用的第三方插件和工具介绍设置

    一:grep console grep-console插件可以让idea显示多颜色调试日志,使Log4j配置输出的不同级别error warn info debug fatal显示不同颜色 开发起来区 ...

  10. Spring Cloud Config 1 (分布式配置中心)

    spring cloud config是spring cloud团队创建的一个全新的项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端和客户端两部分. 服务端也被称为 ...