DataView不知道还有这么好用的功能,真是一种享受。
多说无益,还是让我们一起去享受下这种快感吧
这里首先新建了一个数据集testDataSet,新建一testDataTableDataTable
添加了4列字段
字段名 类型
stringVar System.String
intVar System.Int32
boolVar System.Boolean
datetimeVar System.DateTime
首先声明下,我这里是在WinForm环境下测试的
好,进入关键代码区
view plaincopy to clipboardprint?
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;
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这三个功能,没想获得额外的收获,
意味的惊喜,呵呵~
学习的过程本该就是这么充满乐趣的~
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/luols/archive/2010/04/28/5539573.aspx