datatable 分页.Select()问题 (C#)

下载作业帮安装包
扫二维码下载作业帮
1.75亿学生的选择
c#中,DataTable.Select()中括号里的参数的语法规则,是个什么样的? 本人新手,请教
DataTable.Select() 括号里的为一个条件, 类似SQL的 where 条件比如
DataTable中有字段A
查询 字段A等1的数据 可以用
DataTable.Select("A=1")
为您推荐:
其他类似问题
扫描下载二维码C#中DataTable排序、检索、合并等操作实例
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了C#中DataTable排序、检索、合并等操作实例,其中详细介绍了DataTable.Select的一些注意问题和使用技巧等,需要的朋友可以参考下
一、排序1.获取DataTable的默认视图2.对视图设置排序表达式3.用排序后的视图导出的新DataTable替换就DataTable(Asc升序可省略,多列排序用","隔开)1)、重生法 代码如下:dstaset.Tables.Add(dt)dataset.Tables(0).DefaultView.Sort = "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隔开) 代码如下: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方法对结果进行再查询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.C 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.L i++) { &&& dtNew.Rows.Add(drArr[i]); }但这样程序就会出错,说该DataRow是属于其他DataTable的,那要怎么做呢?很简单,这样就可以解决了: 代码如下:DataTable dtNew = dt.Clone(); for (int i = 0; i & drArr.L i++) { &&& dtNew.ImportRow(drArr[i]); } 这样就完成了。3.5里的DataRow[]有个扩展方法CopyToDataTable() 代码如下:/* * 补充一下,还可以利用DataView来达到检索的目的。 */ DataTable dataSource = new DataTable(); DataView dv = dataSource.DefaultV 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" });
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具159199人阅读
.NET(19)
DataTableDataTableDatatableSelect
Select(string filterExpression)
Select(string filterExpression, string sort)
Select(string filterExpression,string sort, DataViewRowState record States)。
1)Select()&&获取所有 System.Data.DataRow 对象的数组。
Select(string filterExpression)&& System.Data.DataRow
Select(string filterExpression, string sort)&& System.Data.DataRow
Select(string filterExpression, string sort, DataViewRowState recordStates)&& System.Data.DataRow
using System.Collections.G
using System.T
using System.D
namespace TestDataTableSelect
&&& class Program
&&&&&&& static DataTable dt = new DataTable();
&&&&&&& static void Main(string[] args)
&&&&&&& {&&&&&&&&&
&&&&&&&&&&& DataColumn dc1 = new DataColumn("id");
&&&&&&&&&&& dc1.DataType=typeof(int);
&&&&&&&&&&& DataColumn dc2 = new DataColumn("name");
&&&&&&&&&&& dc2.DataType=typeof(System.String);
&&&&&&&&&&& dt.Columns.Add(dc1);
&&&&&&&&&&& dt.Columns.Add(dc2);
&&&&&&&&&&& for (int i = 1; i &=10;i++ )
&&&&&&&&&&& {
&&&&&&&&&&&&&&& DataRow dr = dt.NewRow();
&&&&&&&&&&&&&&& if (i &= 5)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& dr[0] =
&&&&&&&&&&&&&&&&&&& dr[1] = i + "--" + "hello";
&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& else
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& dr[0] =
&&&&&&&&&&&&&&&&&&& dr[1] = i + "--" + "nihao";
&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& dt.Rows.Add(dr);
&&&&&&&&&&& }
&&&&&&&&&&& Select();
&&&&&&&&&&& Select("id&='3' and name='3--hello'");//支持and
&&&&&& &&&& Select("id&='3' or id='1'");//支持or
&&&&&&&&&&& Select("name like '%hello%'");//支持like&&&
&&&&&&&&&&& Select("id&5","id desc");
&&&&&&&&&&& Select("id&5", "id desc",DataViewRowState.Added);
&&&&&&& private static void Select()
&&&&&&&&&&& DataRow[] arrayDR = dt.Select();
&&&&&&&&&&& foreach(DataRow dr in arrayDR)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& Console.WriteLine(dr[0].ToString()+"&&& "+dr[1].ToString());
&&&&&&&&&&& }
&&&&&&&&&&& Console.ReadLine();
&&&&&&& private static void Select(string filterExpression)
&&&&&&&&&&& DataRow[] arrayDR = dt.Select(filterExpression);
&&&&&&&&&&& foreach (DataRow dr in arrayDR)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& Console.WriteLine(dr[0].ToString() + "&&& " + dr[1].ToString());
&&&&&&&&&&& }
&&&&&&&&&&& Console.ReadLine();
&&&&&&& private static void Select(string filterExpression, string sort)
&&&&&&&&&&& DataRow[] arrayDR = dt.Select(filterExpression,sort);
&&&&&&&&&&& foreach (DataRow dr in arrayDR)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& Console.WriteLine(dr[0].ToString() + "&&& " + dr[1].ToString());
&&&&&&&&&&& }
&&&&&&&&&&& Console.ReadLine();
&&&&&&& private static void Select(string filterExpression, string sort, DataViewRowState recordStates)
&&&&&&&&&&& DataRow[] arrayDR = dt.Select(filterExpression, sort,recordStates);
&&&&&&&&&&& foreach (DataRow dr in arrayDR)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& Console.WriteLine(dr[0].ToString() + "&&& " + dr[1].ToString());
&&&&&&&&&& &}
&&&&&&&&&&& Console.ReadLine();
&注意事项:上面的Select操作是大小写不敏感的(记录的字段不敏感),如果需要区分大小写,需要将DataTable的caseSensitive属性设为true。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:477857次
积分:4251
积分:4251
排名:第5823名
原创:69篇
转载:25篇
评论:136条
(1)(2)(2)(7)(2)(1)(2)(1)(3)(7)(4)(1)(1)(2)(9)(22)(15)(8)(4)}

我要回帖

更多关于 datatable 分页 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信