DataView 过滤、排序、DISTINCT功能

本文介绍如何使用DataView进行数据过滤、排序及去重,并演示如何将这些操作应用于WinForm环境下的DataGridView控件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

DataView不知道还有这么好用的功能,真是一种享受。

多说无益,还是让我们一起去享受下这种快感吧

 

这里首先新建了一个数据集testDataSet,新建一testDataTableDataTable

添加了4列字段

字段名                      类型

stringVar          System.String

intVar               System.Int32

boolVar            System.Boolean

datetimeVar     System.DateTime

 

首先声明下,我这里是在WinForm环境下测试的

好,进入关键代码区

  1. private void AddOneRow(testDataSet.testDataTableDataTable dt, string strVar, int intVar,bool boolVar,DateTime datetimeVar)  
  2. {  
  3.     // 插入一条新数据记录   
  4.     dt.AddtestDataTableRow(strVar, intVar, boolVar, datetimeVar);  
  5. }  
  6.   
  7.     // 关键代码   
  8.   
  9.     testDataSet ds = new testDataSet();  
  10.   
  11.     // 先填充些许数据以便后续测试(没有数据怎么能测呢,呵呵~)   
  12.     AddOneRow(ds.testDataTable, "20100001", 1, true, DateTime.Now);  
  13.     AddOneRow(ds.testDataTable, "20100002", 2, true, Convert.ToDateTime("2010-4-25 13:00:36"));  
  14.     AddOneRow(ds.testDataTable, "20100003", 3, false, Convert.ToDateTime("2008-10-25 12:59:36"));  
  15.     AddOneRow(ds.testDataTable, "20100001", 1, true, DateTime.Now);  
  16.     AddOneRow(ds.testDataTable, "20100002", 2, true, Convert.ToDateTime("2010-4-25 13:00:36"));  
  17.     AddOneRow(ds.testDataTable, "20100003", 3, false, Convert.ToDateTime("2008-10-25 12:59:36"));  
  18.   
  19.     /* 这句的作用是相当巨大的,可别小瞧了这句Copy,它把表结构及数据拷贝到另一个内存区域, 
  20.      * 在这里不能用Clone,因为Clone只是把数据结构“克隆”,不包含数据。 */  
  21.     DataTable dt = ds.testDataTable.Copy();  
  22.   
  23.     /* 这里若把ds.testDataTable.DefaultView直接赋给dv,则意味着下面的dt1与 
  24.      * ds.testDataTable紧紧的捆绑在了一起,它们共享同一块内存区域,调试的 
  25.      * 时候可发现dt1与ds.testDataTable的数据已经不一样,但运行后dataGridView1 
  26.      * 和dataGridView2的显示的数据却是完全一样的。所以我们得事先把ds.testDataTable 
  27.      * 挪到另一内存区域,这还是前面Copy那句的功能(作用巨大吧~)。这样我们就帮dt1和 
  28.      * ds.testDataTable给“松绑”了哈~   */  
  29.     DataView dv = dt.DefaultView;  
  30.   
  31.     // 其实本文要说的核心是以下这三句   
  32.   
  33.     // RowFilter,顾名思义就是一个过滤器,相当于SQL的条件查询,可以多条件过滤,中间用and/or等连接   
  34.     dv.RowFilter = "stringVar = '20100002'";  
  35.   
  36.     /* Sort即排序,默认按升序排序(不过我还是习惯手动加上ASC,以便区分),若要降序,则在字段名后面 
  37.      * 加DESC关键字(如"stringVar DESC")即可 */  
  38.     dv.Sort = "stringVar ASC";  
  39.   
  40.     /* ToTable()有4个重载方法,个人认为只有distinct(bool型)和columnNames(params string[]型)这两个 
  41.      * 参数比较有实用价值,distinct参数置为true时就相当于我们SQL的DISTINCT关键字一样的作用,而 
  42.      * columnNames参数就给我们提供了具体抽取哪个字段。下面这句其实就相当于 
  43.      * "SELECT DISTINCT stringVar,intVar from table" */  
  44.     DataTable dt1 = dv.ToTable(true"stringVar""intVar");  
  45.   
  46.     this.dataGridView1.DataSource = ds.testDataTable;  
  47.     this.dataGridView2.DataSource = dt1;  
  48.   
  49.   
  50.     /* 下面这两句也相当重要,若没有这两句,则我们在dataGridView标题栏所设置的颜色就无法显示了 
  51.      * 当然也可以在属性框里直接设置 */  
  52.     this.dataGridView1.EnableHeadersVisualStyles = false;  
  53.     this.dataGridView2.EnableHeadersVisualStyles = false;  

 

本就想整理一下DataView这三个功能,没想获得额外的收获,

意味的惊喜,呵呵~

 

学习的过程本该就是这么充满乐趣的~ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值