好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

VbnetDataTable排序、检索、合并.doc

7页
  • 卖家[上传人]:s9****2
  • 文档编号:397064514
  • 上传时间:2024-01-12
  • 文档格式:DOC
  • 文档大小:28KB
  • / 7 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 这篇文章主要介绍了 C#中DataTable排序、检索、合并等操作实例,其中详细介绍了 DataTable.Select 的一些注意问题和使用技巧等,需要的朋友可以参考下一、排序1. 获取 DataTable 的默认视图2. 对视图设置排序表达式3. 用排序后的视图导出的新 DataTable 替换就 DataTable(Asc 升序可省略,多列排序用"," 隔开)1) 、重生法复制代码代码如下:dst ase t.Tables.Add(d t)dat ase t.Tables(O).Defau ltV iew.So rt 二"id desc"2) 、直接法复制代码代码如下:dv = New DataView(dt)dv.Sort 二"id desc"dt 二 dv.ToTable();3) 、间接法复制代码代码如下:dv = New DataView(ds.Tables[0])dv.Sort 二"id desc"dt 二 dv.ToTable();二、检索设置查询字符串使用Select方法获取到所有满足条件的数据行对象数组(多项查询条件间,用and隔开) 复制代码代码如下:Dat aRow[] mat ches = dt .Selec t(" id〈'003' and name二'名字 11'");string strName = matches[0]["name"].ToString();三、合并假定有2个DataTable:Dt1 , Dt2。

      表结构一样将 Dt2 接在 Dt1 后可采用此方法复制代码代码如下:dt 1.Merge(d t2);四、在DataTable中査询应该注意的问题完成一个查询,返回一个DataTable后,很多时候都想在查询结果中继续搜索这时可以使 用 DataTable.Select 方法对结果进行再查询Select方法有4个重载,我们经常用到的就是DataTable.Select(String)这个St ring的参数是查询的限定式相当于SQL查询语言中的WHERE语句(不含WHERE), 其语法符合SQL语言语法Select方法的返回的是包含查询到的数据的DataRow,但是这个DataRow只是被查询的Dat aTable的一个映射,所以DataRow是随着DataTable的行变化而变化的例如,DataTable 的行都被删除了,那么DataRow中的数据同样被删除了(即便是先Select,再删除的) 所以,要想把返回的 DataRow 放进数据显示控件中,需要将其放入另一个 DataTable 中,如 果直接放入原DataTable或将原DataTable的行全部清除再放入查询所得的数据都是不行的,程序会显示错误,错误提示是“表中已有此行”。

      另外,在一个新表中插入行,不能直接用Dat aTable.Rows.Add(Da taRow)的方式,因为这样 是插入一个新表,也就是DataRow是空的要用导入行的方式,DataTable.ImportRow(Dat aRow) o当然,前提是这个新表要有与原数据表一样的结构复制代码代码如下:Public Function SDEResearch(ByValInputDT As DataTable, ByValSearchStr As String)As DataTable'用来存储再查询后的数据表Dim ReSearchDT As Da taTable = Inpu tDT.Clone()'保证有与源数据表相同的表结构'用来存储查询后返回的datarow数组Dim ReSearchDR() As DataRow = NothingTryReSearchDR = InputDT.Select("NAME LIKE '%" + SearchStr + 〃%,〃)'只是从数据表中映射出来datarow(),所以不能删除原表中的行Catch ex As ExceptionReturn NothingEnd TryFor i As Intl6 = 0 To ReSearchDR.Length - 1ReSearchDT.ImportRow(ReSearchDR(i))Nex tReturn ReSearchDTEnd Function附:筛选 DataTable 数据的方法对 DataTable 进行过滤筛选的一些方法 Select,dataview当你从数据库里取出一些数据,然后要对数据进行整合,你很容易就会想到:复制代码代码如下:DataTabledt = new DataTable();//假设 dt 是由"SELECT C1,C2,C3 FROM Tl〃查询出来的 结果for (int i 二 0; i〈dt .Rows.Cou nt; i++){if (dt.Rows[i]["Cl"].ToString() == "abc")//查询条件{//进行操作}}但这种做法用一两次还好说,用多了就累了。

      那有没有更好的方法呢?记得LinQ是可以直 接对Dat aTable进行查询操作的,那在.Net Framework 2.0里,有没有类似的方法呢?答 案是肯定的,就是dt.Select(),上面的操作可以改成这样:复制代码代码如下:Dat aRow[] drArr = dt .Selec t(" Cl二'abc'");//查询还可以这样操作:复制代码代码如下:Dat aRow[] drArr = dt .Selec t("Cl LIKE 'abc%'");//模糊查询DataRow[] drArr = dt.Select("'abc' LIKE C1 + '%'〃,〃C2 DESC〃);//另一种模糊查询 的方法DataRow[] drArr = dt.Select("Cl二'abc'", "C2 DESC");//排序问题又来了,如果要把DataRow赋值给新的DataTable,怎么赋值呢?你可能会想到:复制代码代码如下:Dat aTabled tNew = dt .Clone();for (int i 二 0; i 〈drArr.Length; i++){dtN ew.Rows.Add(drArr[i]);}但这样程序就会出错,说该DataRow是属于其他DataTable的,那要怎么做呢?很简单,这 样就可以解决了:复制代码代码如下:Dat aTabled tNew = dt .Clone();for (int i 二 0; i 〈drArr.Length; i++){dtN ew.Impo rt Row(drArr[i]);}这样就完成了。

      3.5 里的 DataRow[]有个扩展方法 CopyToDataTable()复制代码代码如下:/**补充一下,还可以利用DataView来达到检索的目的/DataTabledataSource = new DataTable();DataView dv = dataSource.DefaultView;dv.RowF ilter = ""columnA = 'abc'";//l.过滤后直接获取DataTableDat aTable newTable1 = dv.ToTable();//2.设置新 DataTable 的 TableNameDat aTable newTable2 = dv.ToTable(""NewTableName"");//3.设置新表是否过滤重复项,拥有的列的列名以及出现的顺序//即可以设置新表的字段但是字段名肯定是老表dataSource中拥有的DataTable newTable3 =dv.ToTable( tr ue, new stri ng[] { ""columnA,columnF,columnC"" });//4.综合了 2.3两点DataTable newTable4 =dv.ToTable("NewTableName", tr ue, new stri ng[] { ""columnA,columnF,columnC"" });。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.