zoukankan      html  css  js  c++  java
  • 利用dataview为datatable排序

    今天看到有朋友在群中问,要如何从DataTable筛选出不重复的行。因为在SQL中有distinct关键字,所以很多朋友就自然想到了用 dt.Select("distinct 字段")来处理,结果失败了,因为dt.Select是不支持distinct关键字的。

    又有朋友提到,循环所有行,对比每一行与上一列值的值,例如:

    DataRow[] drs=new DataRow[dt.Rows.Count];
    for (int i = 1; i < dt.Rows.Count; i++)
    {
    if (dt.Rows[i]["关键列"].ToString() == dt.Rows[i - 1]["关键列"].ToString())
    {
    drs[i - 1] = dt.Rows[i];
    }
    }


    drs中存储的就是我们想要的所有不重复行的数据了。

    该方法当然可行,但显的复杂了。这里向大家讲解一个最简单的方法,就是利用DataView的ToTable方法来自动过滤所有重复行的数据,代码如下:

    DataTable dt = "您的来源dt";
    DataTable dt_new = dt.DefaultView.ToTable(true, "关键列1", "关键列2");


    dt_new中存储的就是我们想要的所有不重复行的数据了。

    讲解:
    1.DefaultView的返回类型是DataView,而DataView的定义就是:
    表示用于排序、筛选、搜索、编辑和导航的System.Data.DataTable的可绑定数据的自定义视图。
    所以我们在要用到对DataTable进行排序、筛选、搜索、编辑和导航操作时,就要想到用DataView.

    2.public DataTable ToTable(bool distinct, params string[] columnNames)方法:
    从参数名我们就可以猜出它的意思了。
    distinct:表示返回的Data.DataTable是否包含所有列都具有不同值的行,默认为false。
    columnNames:表示要包括在返回的System.Data.DataTable中的列名的列表。如果distinct为true,则它会根据columnNames指定的列名进行筛选过滤。

    该方法还有其它的重载方法,大家可以自行查询

    今天看到有朋友在群中问,要如何从DataTable筛选出不重复的行。因为在SQL中有distinct关键字,所以很多朋友就自然想到了用 dt.Select("distinct 字段")来处理,结果失败了,因为dt.Select是不支持distinct关键字的。

    又有朋友提到,循环所有行,对比每一行与上一列值的值,例如:

    DataRow[] drs=new DataRow[dt.Rows.Count];
    for (int i = 1; i < dt.Rows.Count; i++)
    {
    if (dt.Rows[i]["关键列"].ToString() == dt.Rows[i - 1]["关键列"].ToString())
    {
    drs[i - 1] = dt.Rows[i];
    }
    }


    drs中存储的就是我们想要的所有不重复行的数据了。

    该方法当然可行,但显的复杂了。这里向大家讲解一个最简单的方法,就是利用DataView的ToTable方法来自动过滤所有重复行的数据,代码如下:

    DataTable dt = "您的来源dt";
    DataTable dt_new = dt.DefaultView.ToTable(true, "关键列1", "关键列2");


    dt_new中存储的就是我们想要的所有不重复行的数据了。

    讲解:
    1.DefaultView的返回类型是DataView,而DataView的定义就是:
    表示用于排序、筛选、搜索、编辑和导航的System.Data.DataTable的可绑定数据的自定义视图。
    所以我们在要用到对DataTable进行排序、筛选、搜索、编辑和导航操作时,就要想到用DataView.

    2.public DataTable ToTable(bool distinct, params string[] columnNames)方法:
    从参数名我们就可以猜出它的意思了。
    distinct:表示返回的Data.DataTable是否包含所有列都具有不同值的行,默认为false。
    columnNames:表示要包括在返回的System.Data.DataTable中的列名的列表。如果distinct为true,则它会根据columnNames指定的列名进行筛选过滤。

    该方法还有其它的重载方法,大家可以自行查询

  • 相关阅读:
    sqlserver如何查询一个表的主键都是哪些表的外键
    sql server nullif的使用技巧,除数为零的处理技巧
    如何解决数据库中,数字+null=null
    sql server truncate table 删除表数据限制条件
    eclipse需要的环境变量就两个,一个是java_home指向JDK。另一个是Tomcat,自己去preference-sever下new一个
    解释Eclipse下Tomcat项目部署路径问题(.metadata.pluginsorg.eclipse.wst.server.core mp0wtpwebapps)
    mysql登录退出命令
    代码svn下载到本地后,关于数据库问题
    MySQL配置文件详解
    mysql查看存储过程show procedure status;
  • 原文地址:https://www.cnblogs.com/wangchuang/p/3032613.html
Copyright © 2011-2022 走看看