zoukankan      html  css  js  c++  java
  • datatable删除行

    先列出正确的写法,如果你只想马上改错就先复制吧,

    protected void deleteDataRow(int RowID,DataTable dt)  
        {  
            for (int i = dt.Rows.Count - 1; i >= 0; i--)  
            {  
                if (Convert.ToInt32(dt.Rows[i]["RowID"]) == RowID)  
                    dt.Rows.RemoveAt(i);  
            }  
        }  /* 何问起 hovertree.com */

    如果你有时间想学习一下就继续看下面列出可能出错的可能性吧。

      1.如果只是想删除datatable中的一行,可以用DataRow的delete,但是必须要删除后让DataTable知道,所以就要用到.AcceptChanges()方法,原因是这种删除只是标识性删除,就像我们通常在数据库中用到的IsDelete字段。

      2.彻底删除就要用到datatable的.Rows.Remove(DataRow dr)方法,同理也只是删除一行可以,如果要循环删除请继续往下看。

      3.循环彻底删除就要用.Rows.RemoveAt(int index)方法,所以如果你是foreach的爱好者,在此请你换换口味,还有如果你是for的i++的忠实fans也希望你能换个思维。先看一下上面程序的正向写法(错误的,不可用)

    for (int i = 0, j = dt.Rows.Count; i < j; i++)  
            {  
                if (Convert.ToInt32(dt.Rows[i]["RowID"]) == RowID)  
                    dt.Rows.RemoveAt(i);  
            }  /* 何问起 hovertree.com */

    这个的错误在于datatable的RemoveAt()会在删除后更新dataTable的index,所以你要删除的index可能已经不是你的符合Convert.ToInt32(dt.Rows[i]["RowID"]) == RowID的index了,甚者还会抛出异常,说你访问的index不存在。

      所以要从DataTable的下面往上查找删除,这样即使这行符合条件被删除了,上面的行依旧不受影响。

    说了这么多,不知道你明白了吗?其实现在写这种文章显得有点"弱智",技术学多了,越来越觉得自己的基础不够扎实,希望通过在此记录一下可以督促一下自己,也希望能给初学者带去丝丝帮助。

     http://hovertree.com/menu/csharp/

    操纵dataset
    在DataSet中DataRow是其所有数据的基本存放位置,它主要是由一个值数组组成,代表DataTable单独一行。
    DataRow中主要包括一下几种信息:1、行中每一列的当前值,2、行中每一列的原始值,3、行状态,4、父行与子行间的链接

    初始化一个DataRow:
    DataTable dataTable=dataSet.Tables[0];
    DataRow newRow=dataTable.NewRow(); //用dataTable生成DataRow可以利用dataTable里面的模式
    dataTable.Rows.Add(newRow);

    删除行:
    DataTable.Rows.Remove(行实例);
    DataTable.Rows.RemoveAt(行号);
    DataRow.Delete(); //行自身移除

    读写DataRow的值:
    row["列名"],row[列号]均可引用其中的一个属性
    DataColumn a=dataTable.Columns("列名"); //可以获得一个列

    对行进行批处理更改:
    BeginEdit()开始更改,EndEdit()结束更改,同时将更改结果写入DataSet,CancelEdit(),取消更改
    例如:
    row.BeginEdit();
    对row进行更改
    row.EndEdit();

    http://www.cnblogs.com/roucheng/p/csfetch.html

  • 相关阅读:
    Android JNI之C/C++层调用JAVA
    Android NDK编译之undefined reference to 'JNI_CreateJavaVM'
    Android 开创java世界(JNI Invocation API)
    Android JNI c/c++调用java 无需新建虚拟机
    cmake:善用find_package()提高效率暨查找JNI支持
    如何解决用CMake未定义引用`JNI_CreateJavaVM'?
    [Linker error] undefined reference to `_imp__JNI_CreateJavaVM@12'
    Android jni c/c++线程通过CallVoidMethod调用java函数出现奔溃问题
    【故障公告】部署在 k8s 上的博客后台昨天与今天在访问高峰多次出现 502团队
    上周热点回顾(3.30-4.5)团队
  • 原文地址:https://www.cnblogs.com/roucheng/p/datatable.html
Copyright © 2011-2022 走看看