C# 删除DataTable技巧

 此处DataRow可以循环赋值:ds.Tables[0].Columns.Count 找总量赋值
       DataTable nowTable = ds.Tables[0].Clone();
        //筛除空值项
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            if (ds.Tables[0].Rows[i]["品牌"].ToString().Trim() != "" && ds.Tables[0].Rows[i]["型号"].ToString().Trim() != "")
            {
                DataRow dr= nowTable.NewRow();
                dr[0] = ds.Tables[0].Rows[i][0];
                dr[1] = ds.Tables[0].Rows[i][1];
                dr[2] = ds.Tables[0].Rows[i][2];
                dr[3] = ds.Tables[0].Rows[i][3];
                dr[4] = ds.Tables[0].Rows[i][4];
                dr[5] = ds.Tables[0].Rows[i][5];
                dr[6] = ds.Tables[0].Rows[i][6];
                dr[7] = ds.Tables[0].Rows[i][7];
                nowTable.Rows.Add(dr);
            }
        }
网上其他方法,如下文:

以下内容来自:http://lidonglong.iteye.com/blog/1326863

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

1,使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(index);可以直接删除行
标注一下:DataTable.Rows.Remove(DataRow) 当改行被删除以后,整个表的索引将重建,如果使用循环作为dataRow的index访问表格 则会出现错误,比如你要删除的数据没有删除完;这是因为 当你删除了第八行,i++之后 访问第九行数据,可是之前为第九行的数据由于删除了一行数据而为而索引为8 则访问漏掉了一行数据。
这里有我写的一个例子,大家可以看看:

C#代码 复制代码  收藏代码
  1. for (int i = 0; i < history.Rows.Count; i++)//注意这里一定要用Datatable的Rows.count 作为循环条件终止的值,而不能用 一个定值,因为每当删除一条数据,表的行数会发生变化,访问的下标则不会和未删除之前的表一样。   
  2. {   
  3.     if (!((lngX < 135.549864 && lngX > 73.27112) && (latY > 17.714548 && latY < 52.971885)))   
  4.     {   
  5.         history.Rows.Remove(history.Rows[i]);   
  6.         i--;//删除之后原来索引为i+1 处的行索引会因为删去一行而变为i ,i-- 确保此条数据不被漏掉   
  7.     }   
  8. }  
C#代码 复制代码  收藏代码
  1. for (int i = 0; i < history.Rows.Count; i++)//注意这里一定要用Datatable的Rows.count 作为循环条件终止的值,而不能用 一个定值,因为每当删除一条数据,表的行数会发生变化,访问的下标则不会和未删除之前的表一样。   
  2. {   
  3.     if (!((lngX < 135.549864 && lngX > 73.27112) && (latY > 17.714548 && latY < 52.971885)))   
  4.     {   
  5.         history.Rows.Remove(history.Rows[i]);   
  6.         i--;//删除之后原来索引为i+1 处的行索引会因为删去一行而变为i ,i-- 确保此条数据不被漏掉   
  7.     }   
  8. }  




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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值