C# DataView与DataTable

一、         设置索引和试图

DataTableSelect方法可以对一个表进行筛选和查询,返回的是数据表中可用行的一个子集,这样本来是很方便的,但是如果数据表比较大,而且需要重复对这个表进行相同的查询,那么资源的使用效率就无法达到最佳,另外Select方法返回的是DataRow数组,而不是一个DataTable,所以一些需要一张完整表才能处理的工具就不能对返回的数据行数组进行处理了。

为了客服上面这些问题,ADO.NET中有DataView类。

1、创建DataView对象

它的构造函数有以下三个版本

public DataView();

  

publicDataView(DataTable table);

      

publicDataView(DataTable table, string RowFilter, string Sort, DataViewRowState RowState);

 

默认情况下是把一个表中的所有数据行都映射到了视图中,但是有时候并不需要,我们只需要我们需要的行,并对他排序。下面这两种构造方法是等价的

(1)            DataView view=newDataView(table,”体重=150”,”身高DESC”,DataViewRowState.None);

//直接在构造函数里面就实现删选和排序

(2)            DataView view=newDataView(table);

view.RowFilter=”体重=150”;

view.Sort=”身高 DESC”;

//通过设置相关的属性来实现筛选和排序

 注意:这里面的删选表达式排序表达式和前面讲解table.Select方法时是一样的。

最后一个参数是一个DataViewRowState枚举类型。

 

2、DataView类的三个布尔属性

这三个布尔属性决定了限制通过这个视图能够针对数据行执行的操作。

AllowNew   允许或禁止新建行

AllowEdit    允许或禁止更改行

AllowDelete  允许或禁止删除行

 

3、DataView的常见使用

(1)     查看视图中有多少行:Count属性 如:

Console.WriteLine($"该视图具有的行数为 {view.Count}");

(2)     查找视图中相应的行:Find()FindRows()方法,但是在使用这两个方法之前,有一个必须要注意的点,那就是必须在创建DataView对象时指定了相关的排序表达式,即前面的Sort属性,如下所示:

 

 

view.Sort = "体重 DESC";     //必须制定排序规则,如果不指定,下面的那条语句会出错

DataRowView[]rowView = view.FindRows(100);   //这里的100是体重那一列中的某一个值,即必须指定前面的排序规则才行

foreach (var item in rowView)

{

    Console.WriteLine($"{item[0]}  {item[1]}  {item[2]}");

 

}

 

(3)   将视图转化成一个新的表:ToTable()方法如

DataTable t = view.ToTable();

 

4、 数据表与表视图的补充

事实上,除了为一个表创建自定义的视图对象,即DataView对象以外,每一个表DataTable它本身已经默认了有一个视图的存在,可以通过它的一个属性去获取,即DefaultView属性

如:

DataView v =table.DefaultView;


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864