http://apps.hi.baidu.com/share/detail/16252525

DataTable排序,检索,合并,筛选

DataTable排序,检索,合并详解

一、排序
1 获取DataTable的默认视图
2 对视图设置排序表达式
3 用排序后的视图导出的新DataTable替换就DataTable
(Asc升序可省略,多列排序用","隔开)

一、重生法
dstaset.Tables.Add(dt)
dataset.Tables(0).DefaultView.Sort = "id desc"

二、直接法
dv = New DataView(dt)
dv.Sort = "id desc"
dt = dv.ToTable();

三、間接法
dv = New DataView(ds.Tables[0])
dv.Sort = "id desc"

dt = dv.ToTable();

二、检索
1 设置查询字符串
2 使用Select方法获取到所有满足条件的数据行对象数组 (多项查询条件间,用and隔开)

DataRow[] matches = dt.Select("id<'003' and name='名字11'");
string strName = matches[0]["name"].ToString();

三、合并
假定有2个DataTable:Dt1 , Dt2。表结构一样
将Dt2接在Dt1后可采用此方法

dt1.Merge(dt2);

在DataTable中查询应该注意的问题
【简 介】
完成一个查询,返回一个DataTable后,很多时候都想在查询结果中继续搜索。这时可以使用DataTable.Select方法对结果进行再查询

完成一个查询,返回一个DataTable后,很多时候都想在查询结果中继续搜索。这时可以使用DataTable.Select方法对结果进行再查询。

Select方法有4个重载,我们经常用到的就是DataTable.Select(String)

这个String的参数是查询的限定式。相当于SQL查询语言中的WHERE语句(不含WHERE),其语法符合SQL语言语法。

Select方法的返回的是包含查询到的数据的DataRow,但是这个DataRow只是被查询的DataTable的一个映射,所以DataRow是随着DataTable的行变化而变化的。例如,DataTable的行都被删除了,那么DataRow中的数据同样被删除了(即便是先Select,再删除的)

所以,要想把返回的DataRow放进数据显示控件中,需要将其放入另一个DataTable中,如果直接放入原DataTable或将原DataTable的行全部清除再放入查询所得的数据都是不行的,程序会显示错误,错误提示是“表中已有此行”。

另外,在一个新表中插入行,不能直接用DataTable.Rows.Add(DataRow)的方式,因为这样是插入一个新表,也就是DataRow是空的。要用导入行的方式,DataTable.ImportRow(DataRow)。当然,前提是这个新表要有与原数据表一样的结构。

1Public Function SDEResearch(ByVal InputDT As DataTable, ByVal SearchStr As String) As DataTable
2
3 '用来存储再查询后的数据表
4 Dim ReSearchDT As DataTable = InputDT.Clone() '保证有与源数据表相同的表结构
5
6 '用来存储查询后返回的datarow数组
7 Dim ReSearchDR() As DataRow = Nothing
8
9 Try
10 ReSearchDR = InputDT.Select("NAME LIKE '%" + SearchStr + "%'") '只是从数据表中映射出来datarow(),所以不能删除原表中的行
11 Catch ex As Exception
12 Return Nothing
13 End Try
14
15 For i As Int16 = 0 To ReSearchDR.Length - 1
16 ReSearchDT.ImportRow(ReSearchDR(i))
17 Next
18
19 Return ReSearchDT
20 End Function

附:筛选DataTable数据的方法
对DataTable进行过滤筛选的一些方法Select,dataview

当你从数据库里取出一些数据,然后要对数据进行整合,你很容易就会想到:

DataTable dt = new DataTable();//假设dt是由"SELECT C1,C2,C3 FROM T1"查询出来的结果
for (int i = 0; i < dt.Rows.Count; i++)
{
    if (dt.Rows[i]["C1"].ToString() == "abc")//查询条件
    {
        //进行操作
    }
}
但这种做法用一两次还好说,用多了就累了。那有没有更好的方法呢?记得LinQ是可以直接对DataTable进行查询操作的,那在.Net Framework 2.0里,有没有类似的方法呢?答案是肯定的,就是dt.Select(),上面的操作可以改成这样:

DataRow[] drArr = dt.Select("C1=’abc’");//查询
还可以这样操作:

DataRow[] drArr = dt.Select("C1 LIKE ’abc%’");//模糊查询
DataRow[] drArr = dt.Select("’abc’ LIKE C1 + ’%’", "C2 DESC");//另一种模糊查询的方法
DataRow[] drArr = dt.Select("C1=’abc’", "C2 DESC");//排序
问题又来了,如果要把DataRow赋值给新的DataTable,怎么赋值呢?你可能会想到:

DataTable dtNew = dt.Clone();
for (int i = 0; i < drArr.Length; i++)
{
    dtNew.Rows.Add(drArr[i]);
}
但这样程序就会出错,说该DataRow是属于其他DataTable的,那要怎么做呢?很简单,这样就可以解决了:

DataTable dtNew = dt.Clone();
for (int i = 0; i < drArr.Length; i++)
{
    dtNew.ImportRow(drArr[i]);
}
这样就完成了。

3.5里的DataRow[]有个扩展方法CopyToDataTable()

/*
* 补充一下,还可以利用DataView来达到检索的目的。
*/
DataTable dataSource = new DataTable();
DataView dv = dataSource.DefaultView;
dv.RowFilter = "columnA = 'abc'";
//1.过滤后直接获取DataTable
DataTable newTable1 = dv.ToTable();
//2.设置新DataTable的TableName
DataTable newTable2 = dv.ToTable("NewTableName");
//3.设置新表是否过滤重复项,拥有的列的列名以及出现的顺序
//即可以设置新表的字段。但是字段名肯定是老表dataSource中拥有的。
DataTable newTable3 =
dv.ToTable(true, new string[] { "columnA,columnF,columnC" });
//4.综合了2.3两点。
DataTable newTable4 =
dv.ToTable("NewTableName", true, new string[] { "columnA,columnF,columnC" });

转载于:https://www.cnblogs.com/carl2380/archive/2011/04/01/2002373.html

DataTable排序,检索,合并,筛选相关推荐

  1. DataTable 排序

    DataTable排序,检索,合并 一.排序 1 获取DataTable的默认视图 2 对视图设置排序表达式 3 用排序后的视图导出的新DataTable替换就DataTable (Asc升序可省略, ...

  2. C# 对Datatable排序

    一,在C#中要对Datatable排序,可使用DefaultView的Sort方法.先获取Datatable的DefaultView,然后设置 得到的Dataview的sort属性,最后用视图的ToT ...

  3. sql 排序 分组 层级 筛选 - God聚会啊

    前言: 以前做过2种列表,1是有排序,有筛选功能,但是没有层级和分组,2是有树形结构的层级和分组,但是数据是一下全部加载出来,虽然有点落后,没有用到分页加载,但是也是受制于大环境. 今天有1个需求是  ...

  4. 【Java实现基于关键词的文本排序检索系统】

    Java实现基于关键词的文本排序检索系统@TOC 注:个人的学习记录,勿用于其它途径 实验要求: (1)利用TF-IDF模型,为文本库中的文本创建索引(如倒排索引). (2)用户输入的关键词可以是一个 ...

  5. 两个无序单链表,排序后合并成一个有序链表

    两个无序单链表,排序后合并成一个有序链表 算法思想:用冒泡法,对链表1和2进行排序,对排序后的两个链表,从小到大进行循环,装入链表3中. #include<stdio.h> #includ ...

  6. C# Datatable排序与取前几行数据

    在C#中要对Datatable排序,可使用DefaultView的Sort方法.先获取Datatable的DefaultView,然后设置 得到的Dataview的sort属性,最后用视图的ToTab ...

  7. java jsf table_JSF数据表(h:dataTable)排序数据

    JSF中有一个叫作DataTable的控件,可用来渲染和格式化html表格.使用DataTable,我们可以迭代收集或数组数组来显示数据.下面我们来学习如何向DataTable排序数据. 要使用Dat ...

  8. mysql 升序_MySQL之排序检索数据

    获取数据: 深大享:MySQL之数据准备​zhuanlan.zhihu.com 排序检索数据: 如何使用SELECT语句的ORDER BY子句,根据需要排序检索出的数据. 1.未排序检索数据 -- 未 ...

  9. 数据结构与算法 第八天常见排序+冒泡排序+快速排序+文件IO+大数据排序+文件合并

    数据结构与算法 第八天常见排序+冒泡排序+快速排序+文件IO+大数据排序+文件合并 第一章 冒泡排序 [1]Bubble_Sort.c 第二章 快速排序 [1]quick_sort.c 第三章 大数据 ...

最新文章

  1. Android 防止快速点击
  2. ASP.NET MVC系列:添加控制器
  3. 快速幂(二进制,十进制)
  4. Delphi 2009 新增单元 Character[2]: IsLetter、IsUpper、IsLower、IsDigit、IsNumber
  5. 2018亚太CDN峰会开幕,阿里云王海华解读云+端+AI的短视频最佳实践
  6. identifier 'APP_FOLDER.EVENT' must be declared
  7. 为什么手机显示itunes store无法连接服务器,无法连接到itunes store是什么意思怎么办...
  8. Ubuntu 16.04下用Wine运行的软件出现方块的解决思路(应该是兼容现在所有平台的Wine碰到这个的问题)
  9. 记录学习antd design pro dva的过程,主要记错, 多图预警,如有理解偏差,忘指出,多谢!...
  10. Oracle 11gR2 RAC的两个bug
  11. 2-visio使用与卸载
  12. 惠普1020打印机驱动安装教程
  13. 一文纵览无监督学习研究现状:从自编码器到生成对抗网络
  14. 7-2 矮冬瓜火锅店周年庆“冬瓜会员”查询
  15. 为什么数据库具有很高的独立性
  16. FM ALV和OO ALV的区别
  17. 中国移动互联网测试开发大会(简称MTSC大会)
  18. Android根据byte数组,生成图片,图片名字以当前时间作为名字
  19. 野百合的春天 ——布鲁斯鲍文
  20. 西门子200smart模拟量滤波防抖PLC程序,能实现电流电压和热电阻模拟量信号的采集

热门文章

  1. php学数据结构,PHP 程序员学数据结构与算法之《栈》
  2. DSP集成开发工具CCS的Git工具使用说明(一)
  3. Word中新建样式/修改样式对话框中的各个选项意义
  4. python进行ocr识别图片上的中文
  5. easybcd安装Ubuntu
  6. python-pptx
  7. oracle函数查询数据字典
  8. 访中科曙光智能计算技术总监许涛:重新认识面向未来的AI服务器和云计算中心...
  9. CoolPad backdoor CoolReaper
  10. PHP随手记1--内置函数date