DataView 过滤、排序、DISTINCT功能

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

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

 

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

添加了4列字段

字段名                      类型

stringVar          System.String

intVar               System.Int32

boolVar            System.Boolean

datetimeVar     System.DateTime

 

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

好,进入关键代码区

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

 

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

意味的惊喜,呵呵~

 

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

 

你可能感兴趣的:(数据结构,sql,String,测试,WinForm,2010)