度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 250|回复: 5

[分享] C# DataTable快速查找

[复制链接]

542

主题

5919

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
发表于 2018-6-5 14:38:50 | 显示全部楼层 |阅读模式
1. 使用Select方法查找没有主键的表

DataTable的Select方法返回一个DataRow数组,有四个重载的函数。



DataView prodView = new DataView(prodDS.Tables["Products"],

"UnitsInStock <= ReorderLevel",

"SupplierID, ProductName",

DataViewRowState.CurrentRows);



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



分两种情况:



(1) 主键只有一个字段

DataRow dr = dt.Rows.Find("主键字段的值");



(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"});
回复

使用道具 举报

542

主题

5919

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
 楼主| 发表于 2018-6-5 14:39:19 | 显示全部楼层
回复 支持 反对

使用道具 举报

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
发表于 2018-6-5 17:44:25 | 显示全部楼层
回复 支持 反对

使用道具 举报

542

主题

5919

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
 楼主| 发表于 2018-6-8 15:42:16 | 显示全部楼层
回复 支持 反对

使用道具 举报

231

主题

2541

帖子

5807

积分

论坛元老

Rank: 8Rank: 8

积分
5807
发表于 2018-6-8 17:37:38 | 显示全部楼层
回复 支持 反对

使用道具 举报

542

主题

5919

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
 楼主| 发表于 2018-6-9 15:38:34 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2018-10-17 03:48 , Processed in 0.253143 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表