当前位置:首页 > C#编程 > C#/.net框架 > 正文内容

C# DataView与DataTable

秋天2年前 (2022-05-09)C#/.net框架1065

 

一、         设置索引和试图

DataTable的Select方法可以对一个表进行筛选和查询,返回的是数据表中可用行的一个子集,这样本来是很方便的,但是如果数据表比较大,而且需要重复对这个表进行相同的查询,那么资源的使用效率就无法达到最佳,另外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;


#转载请注明出处 www.skcircle.com 《少有人走的路》勇哥的工业自动化技术网站。

扫描二维码推送至手机访问。

版权声明:本文由7点博客发布,如需转载请注明出处。

本文链接:http://6dot.cn/?id=121

标签: .NET.NET框架
分享给朋友:

“C# DataView与DataTable” 的相关文章

windows下c#程序提高实时性

windows下c#程序提高实时性

引言:我们手里的运控软件对实时性有了新要求。因为同设备上运行的其它视觉软件对cpu时间有变态的占用,压缩了运控软件的cpu占用时间。我们知道如果视觉软件卡一下,最多是处理时间长一点,但是运控软件卡一下,那就意味着撞机的问题,这个要严重得多。这个问题会持续把研究结果更新到本贴子。(一)提升线程和进程的...

C#的propertygrid控件,选择和修改项目时很慢

C#的propertygrid控件,选择和修改项目时很慢

C#的propertygrid控件是很强。可以实现类似Vitual Studio属性面板那样的效果。但是。。。。我们一直痛苦它在选择和修改项目的时候很慢。我的用法是使用控件的SelectObject来绑定数据。C# PgridMotionSpeed.SelectedObject ...

C#的propertygrid控件,选择和修改项目时很慢

C#的propertygrid控件,选择和修改项目时很慢

C#的propertygrid控件是很强。可以实现类似Vitual Studio属性面板那样的效果。但是。。。。我们一直痛苦它在选择和修改项目的时候很慢。我的用法是使用控件的SelectObject来绑定数据。C# PgridMotionSpeed.SelectedObject ...

C#测量程序运行时间及cpu使用时间

C#测量程序运行时间及cpu使用时间

对一个服务器程序想统计每秒可以处理多少数据包,要如何做?答案是用处理数据包的总数,除以累记处理数据包用的时间。这里要指出的是, 运行一段程序,使用的cpu时间,跟实际运行的时间是不一样的。附例如下:C#private void ShowRunTime() {...

C#:多进程开发,控制进程数量

C#:多进程开发,控制进程数量

正在c#程序优化时,如果多线程效果不佳的情况下,也会使用多进程的方案,如下:C#System.Threading.Tasks.Task task=System.Threading.Tasks.Task.Factory.StartNew(     &...

C# 当前不会命中断点 还没有为该文档加载任何符号

C# 当前不会命中断点 还没有为该文档加载任何符号

这个问题网上的经验大概如下:1。 清空方案,重新编译2。 删除项目bin目录下的东西,重新编译3。 解决相互引用的问题。4。 确保不是run的release5。把项目编译改为x866。 好像没发现其它的了。。。这些解决不了我们手上的项目的问题。我们的工程有几十个项目。我长话短说,解决方法是:引导项目...

发表评论

访客

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