DataView 过滤、排序、DISTINCT功能

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值