DataTable中Rows.RemoveAt(i)和Rows(i).Delete的区别

3903人阅读 评论(0) 收藏 举报
分类:
//delete并不是真的删除 只是 将该row的rowstate变为 rowstate.delete(Rows.Count还是那么多)
//remove是 真的从datatable中删除

比如:

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

1. 使用myDataTable.Rows.RemoveAt(i)删除行.
2. 使用myDataTable.Rows(i).delete 这时候需要使用 myDataTable.AcceptChanges 才能更新到数据库.

注意一:
不要在循环里使用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);
}

注意二:
有时候发现使用ds.Tables[0].Rows[i].Delete();数据行也被直接删除了,原因是在创建datatable时没有执行AcceptChanges这个方法,那么在delete时,不会标记,会直接删除掉。
#region 查询合同概要信息表技术中最大合同ID

DataTable dtPOTechnology = temp.Copy();  //dtPOTechnology按照【合同概要信息表技术】字段结构定义,保持一致

//组装dtPOTechnology结构
dtPOTechnology.Columns.Add("UDA1");
dtPOTechnology.Columns.Add("UDA2");
dtPOTechnology.Columns.Add("UDA3");
dtPOTechnology.Columns.Add("UDA4");
dtPOTechnology.Columns.Add("UDA5");

dtPOTechnology.AcceptChanges(); //如果你在创建datatable时没有执行AcceptChanges这个方法,那么在delete时,不会标记,会直接删除掉。
#endregion

#region 检查合同技术概要信息记录是否存在明细为空,组装temp

if (dtTechnologyDetails.Rows.Count == 0)   //没有明细
{
    //在temp中删除这一行,使bulk方法不插入这一行
    //temp.Rows[i]["合同ID"] = dtTechnologyId.Rows[0]["合同ID"];
   dtPOTechnology.Rows[i].Delete();
   //poIdArrayList.Add(dtTechnologyId.Rows[0]["合同ID"]);
   dtReturn.Rows[i]["合同ID"] = dtTechnologyId.Rows[dtTechnologyId.Rows.Count - 1]["合同ID"];
}

dtPOTechnology.AcceptChanges();</span>


参考文献
http://bbs.csdn.net/topics/390495321?page=1
http://www.cnblogs.com/hakuci/archive/2012/04/26/2471586.html
查看评论

Table动态增加,删除,修改行,保存数据

下面要说的就是关键的东西了,动态添加删除修改table行了!完全用JS加Ajax做的,大家可以参考一下!先上个效果图 前台代码如下,我这个是报关用的,先择报关的产品,填写报关数量,单价与送货地点,其中...
  • chuxue1342
  • chuxue1342
  • 2011-01-22 09:21:00
  • 2650

List<T>用RemoveAt删除元素

在用RemoveAt遍历list泛型集合移除数据的时候,不要用foreach遍历,要用for遍历: for (int i = 0; i < ltype.Count; i++) ...
  • uniqer
  • uniqer
  • 2012-10-22 18:07:05
  • 5274

C# Rows.Remove() 和 DataRow.Delete() 的区别

Rows.Remove() 和 DataRow.Delete() 的区别及使用过程中注意的事项
  • shuaishifu
  • shuaishifu
  • 2015-06-01 16:56:00
  • 3621

如何获取RowState为Deleted状态的数据

当删除DataSet中某个Table里的Row时,只是将该Row的RowState设置成了Deleted,如果你仔细的话,会发现Rows.Count并没有变化,我们仍然可以通过循环找到该删除的行,但找...
  • xiao_jun_0820
  • xiao_jun_0820
  • 2009-07-17 16:48:00
  • 2257

关于remove和removeat

                         刚刚搜索一下关于remove和removeat发现一条很有创意的解释             就拿过来借鉴一下            你调用Remov...
  • moon2198
  • moon2198
  • 2010-04-01 22:30:00
  • 214

为javascript的Array添加个has(value),remove(value),removeAt(index)方法

 function array_has(val) {  var i;  for(i = 0; i   {   if(this[i] == val)   {    return true;   }  }...
  • leechiyang
  • leechiyang
  • 2006-01-20 16:31:00
  • 2264

CArray元素的删除RemoveAt(0)

CArray IntArray; for(int i=0; i {     IntArray.Add(i); } // 注意:下面不是实现RemoveAll()的,而是删除一段连续的元素 ...
  • linshixina
  • linshixina
  • 2012-08-03 09:52:02
  • 1626

datatable的例子使用--增加删除修改查询

题记:上一篇博客中介绍到了一个普通的例子,可以是crud,但是当我把这个例子用到项目中时,并且引入了一个模态框,发现一个问题就是查询不好做,因为查询,要分好多种情况进行查询,这个时候就做不下去了,唯一...
  • u011563903
  • u011563903
  • 2015-07-16 13:31:09
  • 8941

jquery datatable 多行(单行)选择(select),行获取/行删除

jquery datatable 多行(单行)选择(select),行获取/行删除代码展示// 示例数据源 var dataSet = [ ['Tasman','Internet Explor...
  • lamyuqingcsdn
  • lamyuqingcsdn
  • 2016-04-18 17:21:24
  • 14539

C# Table.Rows[index].Delete()

如果DataRow.Delete()方法被调用,相应行的RowState属性就会被设置成DataRowState.Deleted。当一个行的状态是DataRowState.Deleted的时候,正常情...
  • xunzaosiyecao
  • xunzaosiyecao
  • 2014-03-03 19:01:06
  • 1559
    个人资料
    持之以恒
    等级:
    访问量: 21万+
    积分: 2196
    排名: 2万+
    最新评论