zoukankan      html  css  js  c++  java
  • datatable 中Remove和delete的区别

    两种删除方法
       Delete的使用是dataStore.Tables("ProcessedFile").Rows.Remove(dr)
       Remove的使用是 dr.Delete()

    Delete的使用是 datatable.Rows[i].Delete();

    Remove的使用是datatable.Rows.Remove(datatable.Rows[i]);

    DataRow.delete方法只是从行集合中删除了行并没有调用datarow的Acceptchanges方法
    而table.rows.remove方法已经隐式得调用了Acceptchanges方法 

    一个DataRow对象刚被创建之后其状态是Detached,是孤立的一个存在,所以建立了DataRow之后在DataRow中的单元填充了数据后还要通过DataTable.Rows.Add(DataRow)方法将此DataRow添加到DataTable,DataRow添加到DataTable后,   这个DataRow的状态就转变为Added。

    当修改了这个DataRow后,这个DataRow状态转为Modified,当用DataRow.Delete()方法删除DataRow后,DataRow状态将转为Deleted,不过此行还存在在DataTable中的,只是状态改变了,这时用DataTable.Rows.Count查看行数,跟删除前是一样的。

    只有在调用了DataTable.Remove(DataRow)方法后,此DataRow才被从DataTable移除,状态也回复到Detached孤立状态。

    MSDN对DataRow.Delete 方法的解释:如果行的 RowState 是“Added”,则该行将从表中移除。在使用 Delete 方法后,RowState 变成“Deleted”。在您调用 AcceptChanges 之前,它一直保持“已删除”。可通过调用 RejectChanges 取消删除行。

    用Delete(),DataSet的HasChanges()=true;
    用Remove(),DataSet的HasChanges()=false;

  • 相关阅读:
    一个漂亮的lazarus做的pagecontrol
    预测,阿里盒子必将失败!
    sex在软件开发中的运用--SIX技术
    糟糕的@@identity,SCOPE_IDENTITY ,IDENT_CURRENT
    Delphi、Lazarus保留字、关键字详解
    糟糕的界面设计
    Firebird存储过程--更加人性化的设计
    lazarus的动态方法和虚拟方法
    用户行为导向的交互设计
    Javascript的一个怪现象
  • 原文地址:https://www.cnblogs.com/colder/p/2079570.html
Copyright © 2011-2022 走看看