在DataTable和DataView中查找指定记录

Posted 每天进步多一点

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在DataTable和DataView中查找指定记录相关的知识,希望对你有一定的参考价值。

一、在DataTable中查找


1. 使用Select方法查找没有主键的表
DataTable的Select方法返回一个DataRow数组,有四个重载的函数。

DataRow[] drs = dt.Select("UserName LIKE ‘张%‘");

2. 使用Find方法查找有主键的表

分两种情况:
(1) 主键只有一个字段

DataRow dr = dt.Rows.Find("主键字段的值");
dt.PrimaryKey = new DataColumn[] { dt.Columns["Id"] };

dt.PrimaryKey= new DataColumn[] { dt_smartgrid.Columns["A"], dt_smartgrid.Columns["B"] };


(2) 主键有多个字段
例如,表的主键由一个整型字段ID和一个字符类型自动Name组成,以下代码查找满足ID=10且Name="张三"条件的记录。

Object[] objs = new Object[]{10,"张三"};
dr = dt.Rows.Find(objs);


二、使用DataView筛选数据

 

DataView可以看成DataTable中的记录加上某种条件后得到的数据。DataView依附于DataTable,每个DataTable都至少有一个DataView。数据绑定中控件绑定到的其实不是DataTable,而是DataTable的DefaultView。

DataView常用的数据筛选方法有:
1. 筛选特定状态的行
以下代码找出所有新加的行:

dv.RowStateFilter = DataViewRowState.Added;

 

2. 使用Sort属性,可以指定单个或多个列进行排序,如:

dv.Sort = "Name ASC,ID DESC";

3. 使用RowFilter属性动态筛选记录。

dv.RowFilter = "Name LIKE ‘张%‘";
4. 使用Find和FindRows在DataView中查找。

使用这两个方法,是按照行的排序关键字值来对行进行搜索的。

Find方法返回一个整数,表示匹配搜索条件的DataRowView的索引。如果多行匹配,只返回一个匹配行索引,如果未找到匹配项,返回-1。

若要返回匹配多个行的搜索结果,可以使用FindRows方法。它返回DataView中的所有匹配行的DataRowView数组。如果未找到匹配项,DataRowView数组为空。

若要使用Find或FindRows方法,必须通过将ApplyDefaultSort设置为true或通过使用DataView对象的Sort属性来指定排序顺序,否则将引发异常。这两种方法将一个值数组用做输入,该数组的长度与排序顺序包含的列数相匹配。当对多个列进行排序时,对象数组的值必须匹配在DataView的Sort属性中指定的列的顺序。

对具有单个列排序顺序的DataView调用Find方法。

 

dv.Sort = "Name";
int rowIndex = dv.Find("张三");

 

如果Sort属性指定多个列,则必须按照Sort属性指定的顺序为每个列传递包含搜索值的对象数组。

dv.Sort = "Name,ID";
DataRowView[] foundRows = dv.FindRows(new Object[]{"张%","001"});

以上是关于在DataTable和DataView中查找指定记录的主要内容,如果未能解决你的问题,请参考以下文章

c#如何从DataTable构建自定义DataView?

DataView

C# 在 .NET 1.1 中将 DataView 转换为表(DataTable)

为啥我需要将 DataView(而不仅仅是 DataTable)传递给 PieChart.draw()?

asp.net如何对DataTable 或DataView进行统计,比如像用SQL函数里的Sum统计类似。

DataSetDataTableDataView三者关系及DataView 常见用法