Vb.netDataTable排序、检索、合并.docx_第1页
Vb.netDataTable排序、检索、合并.docx_第2页
Vb.netDataTable排序、检索、合并.docx_第3页
Vb.netDataTable排序、检索、合并.docx_第4页
Vb.netDataTable排序、检索、合并.docx_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

资料收集于网络 如有侵权请联系网站 删除 谢谢 这篇文章主要介绍了C#中DataTable排序、检索、合并等操作实例,其中详细介绍了DataTable.Select的一些注意问题和使用技巧等,需要的朋友可以参考下一、排序1.获取DataTable的默认视图2.对视图设置排序表达式3.用排序后的视图导出的新DataTable替换就DataTable(Asc升序可省略,多列排序用,隔开)1)、重生法复制代码 代码如下:dstaset.Tables.Add(dt)dataset.Tables(0).DefaultView.Sort = id desc2)、直接法复制代码 代码如下:dv = New DataView(dt)dv.Sort = id descdt = dv.ToTable();3)、间接法复制代码 代码如下:dv = New DataView(ds.Tables0)dv.Sort = id descdt = dv.ToTable();二、检索设置查询字符串使用Select方法获取到所有满足条件的数据行对象数组 (多项查询条件间,用and隔开)复制代码 代码如下:DataRow matches = dt.Select(id003 and name=名字11);string strName = matches0name.ToString();三、合并假定有2个DataTable:Dt1 , Dt2。表结构一样将Dt2接在Dt1后可采用此方法复制代码 代码如下:dt1.Merge(dt2);四、在DataTable中查询应该注意的问题完成一个查询,返回一个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)。当然,前提是这个新表要有与原数据表一样的结构。复制代码 代码如下:Public Function SDEResearch(ByVal InputDT As DataTable, ByVal SearchStr As String) As DataTable用来存储再查询后的数据表 Dim ReSearchDT As DataTable = InputDT.Clone() 保证有与源数据表相同的表结构 用来存储查询后返回的datarow数组 Dim ReSearchDR() As DataRow = Nothing Try ReSearchDR = InputDT.Select(NAME LIKE % + SearchStr + %) 只是从数据表中映射出来datarow(),所以不能删除原表中的行 Catch ex As Exception Return Nothing End Try For i As Int16 = 0 To ReSearchDR.Length - 1 ReSearchDT.ImportRow(ReSearchDR(i) Next Return ReSearchDT 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.RowsiC1.ToString() = abc)/查询条件 /进行操作 avenue n. 林荫道;道路;大街但这种做法用一两次还好说,用多了就累了。那有没有更好的方法呢?记得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(drArri); 但这样程序就会出错,说该DataRow是属于其他DataTable的,那要怎么做呢?很简单,这样就可以解决了:复制代码 代码如下:DataTable dtNew = dt.Clone(); for (int i = 0; i drArr.Length; i+) dtNew.ImportRow(drArri); 这样就完成了。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 =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论