• (转)DataRow的各种状态和DataView的两种过滤属性


    DataRow的各种状态

    一个DataRow对象刚被创建之后(DataTable.NewRow())其状态是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孤立状态。
     

     一旦调用了DataTable.AcceptChanges()方法后,所有的行将根据不同的状态做不同的处理,Added、Modified、Unchanged将保留当前值.

    Deleted的行将从DataTable中移除,最后所有的行的状态都置为Unchanged。

    当DataTable是从DataAdapter.Fill(DataSet,DataTable)方法填充而形成的,Fill()方法将自动调用AcceptChanges()方法,将DataTable的行状态都置为Unchanged。并且,如果Fill方法中指定的那个DataTable在要填充的那个DataSet不存在时,会生成一个跟数据源表同样的结构的DataTable并填充数据。  

    DataView的两种过滤属性
    RowFilter 列满足某个条件 例如:"LastName = Smith ",这就是只查看列LastName的值为 Smith 的那些数据行。
    RowStateFilter   RowStateFilter 属性用来设置 DataView 中的行状态筛选器,上面介绍DataRow时介绍了DataRow的状态,一个DataRow可能有五种状态,RowStateFilter就是可以通过这些状态来筛选要查看的行集。其实DataRow不仅有五种状态,DataRow还有版本的问题,比如当DataRow的状态为Modified,即这行已经被修改了,这时这个DataRow就会有两个版本,Current版本和Original版本(修改前的)。
     
    #region DataRow行的集中状态  added,modified,unchanged,delete,detached
                DataRow dr = dt.NewRow();
                dr[0] = 10;
                dt.Rows.Add(dr);
                dt.Rows[0].AcceptChanges();
                dt.Rows[0][0] = 12;
                dt.Rows[0].AcceptChanges();
                dt.Rows[0].Delete();
                dt.Rows.Remove(dr);
                #endregion
  • 相关阅读:
    C++面向对象高级编程(下)第二周-Geekband
    C++面向对象高级编程(下)第一周-Geekband
    C++面向对象高级编程(下)-Geekband
    堆,栈,内存管理, 拓展补充-Geekband
    C++面向对象高级编程(上)-Geekband
    MFC 多屏显示
    Open CASCADE Technology: IGES Support
    JAVA反射
    HashMap
    Linux 系统编程
  • 原文地址:https://www.cnblogs.com/wangyt223/p/4189419.html
Copyright © 2020-2023  润新知