C#中删除DataTable中的行的方法

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

•使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(index);可以直接删除行
•datatable.Rows[i].Delete()。Delete()之后需要datatable.AccepteChanges()方法确认完全删除,因为Delete()只是将相应列的状态标志为删除,还可以通过datatable.RejectChanges()回滚,使该行取消删除。
•在删除DataTable中的行的时候,每删除一行,DataTable中所有行的索引都会发生改变。在循环删除DataTable.Row的时候不能使用foreach。使用foreach进行循环的时候,是不允许Table有删除和添加操作的。
•如果是按某列为条件进行删除,则每删完一行,整个Table的index就会立即发生变化,等于Table已经变成了一个新的表。但是索引却已经加1了。于是会造成第一列永远匹配不到。因此,每删除完一行,要跟着判断第一行是否满足删除条件。
•如果要删除DataTable中的多行,应该采用倒序循环DataTable.Rows。因为正序删除时索引会发生变化。程式发生异常,很难预料后果。(不要在循环里使用myDataTable.Rows.RemoveAt(i).因为每删除一行后.i的值会增加,但行数会是减少了.这么做一定会出错.因此要遍历数据,使用Remove方式时,要倒序的遍历)

int count = ds.Tables[0].Rows.Count;
for (int i = count -1; i >=0; i--)

ds.Tables[0].Rows.RemoveAt(i);
}

总结:

delete和remove

•Delete的使用是 datatable.Rows[i].Delete();
•Remove的使用是datatable.Rows.Remove(datatable.Rows[i]);
•这两个的区别是,使用delete后,只是该行被标记为deleted,但是还存在,用Rows.Count来获取行数时,还是删除之前的行数.需要使用datatable.AcceptChanges()方法来提交修改.
而Remove方法则是直接删除.(有时候发现使用ds.Tables[0].Rows[i].Delete();数据行也被直接删除了,原因是在创建datatable时没有执行AcceptChanges这个方法,那么在delete时,不会标记,会直接删除掉。)
•如果在for循环里删除行的话,最好是使用delete方法,不然会出现count变化的情况.循环完后再使用AcceptChanges()方法提交修改,删除掉标记为deleted的行

时间: 2024-10-06 01:10:26

C#中删除DataTable中的行的方法的相关文章

sql server 中删除表中数据truncate和delete的区别(转载自.net学习网)

我们都知道truncate table可以用来删除整个表的内容,它与delete后面不跟where条件的效果是一样.但除此之外,我们还清楚它们之间有其它的区别吗?本章我们将一起讨论truncate与delete区别. 我们先看一下truncate table的说明:删除表中的所有行,而不记录单个行删除操作.TRUNCATE TABLE在功能上与没有WHERE子句的DELETE语句相同:但是,TRUNCATE TABLE速度更快,使用的系统资源和事务日志资源更少. truncate table的语

JS中删除数组中元素的几种方法

1.删除数组中的最后一个元素: 1 <script> 2 // 首先定义一个数组 3 var arr = [1,2,3,4,5]; 4 // 输出数组 5 console.log(arr);//结果为[1,2,3,4,5] 6 // 调用pop 方法 7 arr.pop(); 8 // 再次输出 9 console.log(arr);//结果为[1,2,3,4] 10 </script> 使用pop()方法只能删除数组中的最后一个元素. 2.删除数组中的第一个元素: 1 <s

Java中删除List中的某些数据的方法

经过试验,删除List中某些数据的最好的方法是使用iterator,如果有什么不对的地方,请指正批评:记录代码: /** * 去除未发布状态的课件,并删除其在数据库的存储 * @param listLessons * @return */ public static List<LessonModel> removeUnpublishedLessons(KorenpineApplication application, List<LessonModel> listLessons){

Java中删除List中相同元素的两种方法

Java中两种删除List中相同element的方法,一种维护List原先的元素顺序,另一种不维护List原先的元素顺序. package stage3; import java.util.Iterator; public class RemoveTheElement { public static <E> void removeDuplicateWithoutOrder(java.util.List<E> list) { java.util.Set<E> set = 

python中删除某个元素的3种方法

python中关于删除list中的某个元素,一般有三种方法:remove.pop.del 1.remove: 删除单个元素,删除首个符合条件的元素,按值删除举例说明: >>> str=[1,2,3,4,5,2,6] >>> str.remove(2) >>> str [1, 3, 4, 5, 2, 6] 2.pop: 删除单个或多个元素,按位删除(根据索引删除) ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:××× 寻找有志同道合

删除datatable中的行

今天遇到一问题,无论如何也删除不干净datatable.我想全部删除.但总是得不到想要的结果. for (int i = 0; i < dt.Rows.Count; i++) { //dt.Rows.Remove(dt.Rows[i]); dt.Rows[i].Delete(); Console.Write("dr.rows.count" + dt.Rows.Count + "\r\n删除了数据" + i.ToString() + "\r\n&quo

sql 表中删除字段重复的行

Id    Email    UserName1    [email protected]    TaiseerJoudeh2    [email protected]    HasanAhmad3    [email protected]    MoatasemAhmad4    [email protected]    SalmaTamer5    [email protected]    AhmadRadi6    [email protected]    BillGates7    [e

怎么在Beyond Compare中删除表格中的列表数据

Beyond Compare是一款用于文件及文件夹比较的软件,不仅可以快速比较出两个文件夹之间的不同之处,还可以详细比较文件之间的内容差异. 当我们使用Beyond Compare执行表格比较会话操作时,可能想要对比较的原表格数据进对行修改,以便于更加有针对性的查看数据之间的差异部分,例如:删除列表数据.修改列表名称或者重置文件排列顺序等,接下来就和大家简单介绍一下,Beyond Compare表格比较删除列表数据的方法. 具体操作步骤如下所示 步骤一:打开Beyond Compare软件,选择

js中删除数组元素的几种方法

1:js中的splice方法 splice(index,len,[item])    注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值 index:数组开始下标        len: 替换/删除的长度       item:替换的值,删除操作的话 item为空 如:arr = ['a','b','c','d'] 删除 ----  item不设置 arr.splice(1,1)   //['a','c','d']         删除起始下