zoukankan      html  css  js  c++  java
  • C# 解决datatable想删除不想要的多行方法



    最近做东西,用到需要把一个datatbale的数据分为符合的和不符合的数据,但是一旦删除某一行索引值就会发生改变,如果用循环去remove的话就会出现删除

    数据有误了,改用datatable.Rows[i].Delete()可解决问题。下面为代码示例:

                            for (int i = 0; i <= ArrDeleteRowNo.Length - 1; i++)
                            {
                                int arraa = ArrDeleteRowNo.Length;//用数组记录要删除的位置行数
                                DT_Query.Rows[ArrDeleteRowNo[i]].Delete();//记录删除位置
    
                            }
                            DT_Query.AcceptChanges();//提交删除位置的改变

    注意:

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


    另外在网上还看到以下的方法 第一个还没有试过,先收藏...

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

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


    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()回滚,使该行取消删除。

  • 相关阅读:
    React开发入门
    API爬虫--Twitter实战
    网页爬虫--scrapy入门
    爬虫入门(实用向)
    随谈10年的技术生涯和技术成长
    html元素的显示和隐藏
    Ubuntu下用cue文件对ape和wav文件自动分轨
    Bash内置命令exec和重定向
    Bash提示符
    Bash启动选项
  • 原文地址:https://www.cnblogs.com/zorrobubble/p/3596910.html
Copyright © 2011-2022 走看看