一、DataTable
  
   DataTable表示内存中数据的一个表,它完全是在内存中的一个独立存在,包含了这张表的全部信息。DataTable可以是从通过连接从数据库中读取出来形成的一个表,一旦将内容读到DataTable中,此DataTable就可以跟数据源断开而独立存在;也可以是完全由程序自己通过代码来建立的一个表。
  
  ◆ DataColumn
  
  一个表是由行和列组成的一个两维的结构。表的结构是由DataColumn 对象的集合组成,DataColumn 对象集合可由DataTable.Columns 属性中能获取到,通过定义每一列的数据类型来确定表的架构,类似数据库中定义表。定义完表的结构就可以根据结构来生成DataRow,用DataTable.NewRow()方法来生成此DataTable结构的新行。
  一个DataTable是由DataRow的集合组成的, DataRow的集合这个可以由DataTable.Rows 属性来访问。
  
  DataTable还可以通过现有的列用Expression 属性的表达式创建一些列。
  
  1、创建计算出的列
  比如:已经有了一个表结构,表中有一个DataColumn的集合,其中有一个叫UnitPrice的列,你可以新建一个DataColumn,设置好ColumnName,再设置此列的表达式,DataColumn.Expression = "UnitPrice * 0.086",这个列的值就是名字为UnitPrice的列计算出来的,在创建表达式时,使用 ColumnName 属性来引用列。
  
  2、第二个用途是创建聚合列
  聚合列聚合通常沿着关系执行(有关关系的描述见下面DataRelation部分),如果order表有名为 detail 的子表,两个表之间通过order.orderid和detail.orderid两个列建立一个关系 DataRelation 对象名为“order2detail”,在主表order中就可以建立一个聚合列,将计算每个order在detail表中含有的所有item的价格的和:DataColumn.Expression = “sum(child(order2detail).price)",child(order2detail)表示通过关系order2detail联系到的子表,child(order2detail).price就表示子表的price列。
  
  ◆ DataRow
  
  DataRow对象没有直接在代码中使用的构造函数,一般是从具有一定结构的DataTable用NewRow()方法来新建一个DataRow对象。一个DataRow根据其是独立的,还是属于某个DataTable,是否修改过,是否被DataTable删除等等不同的情况有不同的状态,由DataRow.RowState属性公开,如下表:
  
  
  成员名称 说明
  Added 该行已添加到 DataRowCollection 中,AcceptChanges 尚未调用。Deleted 该行已通过 DataRow 的 Delete 方法被删除。
  Deleted 该行已通过 DataRow 的 Delete 方法被删除。
  Detached 该行已被创建,但不属于任何 DataRowCollection。DataRow 在以下情况下立即处于此状态:创建之后添加到集合中之前;或从集合中移除之后。
  Modified 该行已被修改,AcceptChanges 尚未调用。
  Unchanged 该行自上次调用 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孤立状态。
  
  一旦调用了DataTable.AcceptChanges()方法后,所有的行将根据不同的状态做不同的处理,Added、Modified、Unchanged将保留当前值,Deleted的行将从DataTable中移除,最后所有的行的状态都置为Unchanged。当DataTable是从DataAdapter.Fill(DataSet,DataTable)方法填充而形成的,Fill()方法将自动调用AcceptChanges()方法,将DataTable的行状态都置为Unchanged。并且,如果Fill方法中指定的那个DataTable在要填充的那个DataSet不存在时,会生成一个跟数据源表同样的结构的DataTable并填充数据。
  
  ◆ DataRelation
  
  表示两个 DataTable 对象之间的父/子关系。可以类比于数据库中的表之间的关系,父表相当于关系列为主键的表,子表相当于关系列为外键的表。DataRelation 构造函数一般为:DataRelation(String, DataColumn, DataColumn) ,string为关系名,第一个DataColumn为建立关系的父表列,第二个DataColumn为建立关系的子表列,建立关系的两个列的 DataType 值必须相同。
  
  建立好了关系,必须把这个关系加入到DataTable的ParentRelations属性或ChildRelations 属性,这两个属性包含这个表的所有的跟父表的关系和跟子表的关系。若关系中此表是父表则将此关系加入到ChildRelations集合中,否则加入到ParentRelations集合中。
  
  二、DataView
  
  DataView表示用于排序、筛选、搜索、编辑和导航的 DataTable 的可绑定数据的自定义视图。可以将DataView同数据库的视图类比,不过有点不同,数据库的视图可以跨表建立视图,DataView则只能对某一个DataTable建立视图。DataView一般通过DataTable.DefaultView 属性来建立,再通过通过RowFilter 属性和RowStateFilter 属性建立这个DataTable的一个子集。
  
  RowFilter属性用来筛选要查看DataTable中哪些行的表达式,这个表达式同上面所说的建立计算列的表达式相同。例如:"LastName = Smith ",这就是只查看列LastName的值为 Smith 的那些数据行。
  
  RowStateFilter 属性用来设置 DataView 中的行状态筛选器,上面介绍DataRow时介绍了DataRow的状态,一个DataRow可能有五种状态,RowStateFilter就是可以通过这些状态来筛选要查看的行集。其实DataRow不仅有五种状态,DataRow还有版本的问题,比如当DataRow的状态为Modified,即这行已经被修改了,这时这个DataRow就会有两个版本,Current版本和Original版本(修改前的)。实际上RowStateFilter属性是综合了DataRow的状态和版本来筛选的(RowStateFilter确省值是CurrentRows)见下表:
  
  成员名称 说明
  Added 一个新行。
  CurrentRows 包括未更改行、新行和已修改行的当前行。
  Deleted 已删除的行。
  ModifiedCurrent 当前版本,原始数据(请参阅 ModifiedOriginal)的修改版本。
  ModifiedOriginal 原始版本(尽管它后来已被修改并以 ModifiedCurrent 形式存在)。
  None 无。
  OriginalRows 包括未更改行和已删除行的原始行。
  Unchanged 未更改的行。
  
  DataView.Count属性得到的计数是在应用了 RowFilter 和 RowStateFilter 之后,获取 DataView 中记录的数量。
  
  DataView是建立在DataTable基础上的,DataView.Table 属性可以得到此DataView对应的那个DataTable。DataView的行叫DataRowView,可以从DataRowView直接通过DataRowView.Row 属性得到此DataRowView对应的DataRow。
  
  三、DataGrid
  
  这里说的DataGrid是winform中的DataGrid,一般都是跟DataView绑定来显示DataTable中的数据,和修改DataTable中的数据。
  DotNet的DataGrid的功能强大,可是在使用上与以前的习惯不太一样,有时还比较麻烦,所以很多人都对这个DataGrid感到有些摸不着头脑,有一种无从下手的感觉,其实把一些概念搞清楚了许多问题就会迎刃而解了。
  
  DataGrid通过DataSource 和 DataMember 属性来绑定其要显示的数据源。数据源一般是DataTable、DataView、DataSet等,不过将这些数据源绑定到DataGrid时实际上是绑定的DataView。若数据源是DataTable时,实际上是绑定了此DataTable的DefaultView,若数据源是DataSet时,则可以向 DataMember 属性设置一个字符串,该字符串指定要绑定到的表,然后再将DataMember指定的那个DataTable的DefaultView绑定到DataGrid。
  
  所以DataGrid实际显示的是DataTable经过筛选的DataView。

转载于:https://www.cnblogs.com/zhengxiqiang/archive/2009/07/26/1531301.html

DataTable,DataView和DataGrid中一些容易混淆的概念相关推荐

  1. 在DataGrid中显示图片

    兼谈 DadaGrid 模板列的创建 DadaGrid 是 ASP.NET 编程中一个很重要的控件,其优良的可定制功能为提高它的表现力提供了极大的方便.除了与数据源直接绑定以外,我们还可以通过列绑定模 ...

  2. DataGrid中的高级ToolTip

            实现的效果是由于单条记录需要了解的信息过多使DataGrid中摆放不下时的解决方案,首先将记录的一部分信息进行分类将重要的信息进行保留显示,将相关信息列隐藏掉,在鼠标移动到DataGr ...

  3. DataGrid中页导航栏的自定义样式

    我们可以利用DataGrid的ItemCreat()方法来实现DataGrid中页脚(Foot)和页导航栏的自定义样式.ItemCreat,顾名思义,就是在数据项创建时发生的事件,对于DataGrid ...

  4. 将一个Excel中的数据导入DataGrid中

    第一步: 获取计算机中的一个Excel文件利用File Field控件和Javascrip脚本 File Field控件ID:DocUpload <INPUT id="DocUploa ...

  5. 把DataGrid中的内容以Excel显示

    客户端脚本 <TABLE id="Table1" style="Z-INDEX: 102; LEFT: 16px; WIDTH: 288px; POSITION:  ...

  6. 用动态属性和DataView实现DataGrid的双向排序

    电脑神童创业记  百度 搜狗 搜搜   个人博客   DataGrid是ASP.NET中非常重要的一个控件.它能方便的让我们实现编辑.排序功能:但是排序功能默认的是升序(ASC),能不能让DataGr ...

  7. vs2022 C#连接sqlserver将表显示在wpf的datagrid中

    打开vs2022,点击文件->新建->项目 然后选择WPF应用程序,点击下一步. 输入项目名称,点击下一步. 根据需求选择.NET框架,这里默认.NET6,点击创建. 弹出设计窗口 点击左 ...

  8. 【C#小知识】C#中一些易混淆概念总结(三)---------结构,GC,静态成员,静态类...

    目录: [C#小知识]C#中一些易混淆概念总结 [C#小知识]C#中一些易混淆概念总结(二) ---------------------------------------分割线----------- ...

  9. 【C#小知识】C#中一些易混淆概念总结(七)---------解析抽象类,抽象方法

    目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...

最新文章

  1. HarmonyOS系统概述
  2. 论坛报名 | 智能信息检索与挖掘的最新进展和挑战
  3. poj3206(bfs+最小生成树)
  4. PyQt5学习笔记03----Qt Designer生成源码
  5. 算法:线性时间选择_机器学习必修课!scikit-learn 支持向量机算法库使用小结
  6. SpringMVC框架搭建( 使用Jar包搭建)
  7. itextpdf html 样式,将HTML解析为PDF的iText样式
  8. [HNOI2013]题解
  9. 使用vue-cli+axios配置代理进行跨域访问数据
  10. 安装Cisco Packet Tracer
  11. 浏览器兼容测试工具-IETest
  12. Java是什么,Java是什么意思。
  13. Qt小游戏教程之贪吃蛇(带源码)
  14. 爬虫入门 ---- CSDN查看文章全部评论
  15. MW7299/PD+HUB2.0集成芯片上行支持PD3.0协议下行HUB支持BC1.2协议QFN32封装
  16. 从violate到ConcurrentHashMap,我通过引导面试官,过了多场技术面试
  17. ipynb 文件转 py
  18. 夯实基础 js数据类型
  19. Rimworld Mod制作教程1 认识Mod结构
  20. 重庆科技学院计算机判断题及答案,晶体光学试题与答案-重庆科技学院

热门文章

  1. python有没有类似unity3d_像web一样使用python
  2. centos radius mysql_centos6.5下安装freeradius2.2.9+mysql
  3. 鸿蒙第一款手机,拿下“国内第一手机商”的OPPO,打算弃用华为鸿蒙?
  4. mysql添加分区健_MySQL添加分区添加索引
  5. python gevent模块 下载_Python中的多任务,并行,并发,多线程,多进程,协程区别...
  6. 2021百度职业教育行业洞察
  7. 此电脑怎么放在桌面上_window10桌面美化,真的是美爆了,高效整理电脑桌面
  8. 需求获取的三阶段:需求背景、需求调研、需求分析 (3)
  9. 基于主体掩码的实体关系抽取方法
  10. Paper Pal:一个中英文论文及其代码大数据搜索平台