在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"});
时间: 2024-10-11 08:23:03

在DataTable和DataView中查找指定记录的相关文章

10-1. 在字符串中查找指定字符(15)

输入一个字符串S,再输入一个字符c,要求在字符串S中查找字符c.如果找不到则输出“Not found”:若找到则输出字符串S中从c开始的所有字符. 输入格式: 输入在第1行中给出一个不超过80个字符长度的.以回车结束的非空字符串:在第2行中给出一个字符. 输出格式: 在一行中按照题目要求输出结果. 输入样例1: It is a black box b 输出样例1: black box 输入样例2: It is a black box B 输出样例2: Not found 1 #include <

程序员面试题目总结--数组(三)【旋转数组的最小数字、旋转数组中查找指定数、两个排序数组所有元素中间值、数组中重复次数最多的数、数组中出现次数超过一半的数】

转!http://blog.csdn.net/dabusideqiang/article/details/38271661 11.求旋转数组的最小数字 题目:输入一个排好序的数组的一个旋转,输出旋转数组的最小元素. 分析:数组的旋转:把一个数组最开始的若干个元素搬到数组的末尾.例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1.这道题最直观的解法并不难.从头到尾遍历数组一次,就能找出最小的元素,时间复杂度显然是O(N).但这个思路没有利用输入数组

*字符串-01. 在字符串中查找指定字符

1 /* 2 * Main.c 3 * D1-字符串-01. 在字符串中查找指定字符 4 * Created on: 2014年8月18日 5 * Author: Boomkeeper 6 *****部分通过****** 7 */ 8 9 #include <stdio.h> 10 11 int mysearch(char ch, const char str[], int length) { 12 13 int j, ret = -1; 14 15 for (j = 0; j < le

在一个升序的但是经过循环移动的数组中查找指定元素

数组是升序的,数组经过循环移动之后,肯定是有左半部分或者有半部分还是升序的. 代码: public class SearchRotateArray { public static int search(int a[], int l, int u, int x) { while(l<=u){ int m = (l+u)/2; if(x==a[m]){ return m; }else if(a[l]<=a[m]){ //左半部分升序排列 if(x>a[m]){ l=m+1; }else if

Rhel7 grep在文件中查找指定的字符串,将其输出到指定文件

Rhel7 grep在文件中查找指定的字符串,将其输出到指定文件 [[email protected] findfiles]# cat /usr/share/dict/words |grep seismic anaseismic antiseismic aseismic -- [[email protected] findfiles]# cat /usr/share/dict/words |grep seismic >>/root/wordlist [[email protected] fin

在字符串中查找指定字符

输入一个字符串S,再输入一个字符c,要求在字符串S中查找字符c.如果找不到则输出“Not found”:若找到则输出字符串S中从c开始的所有字符. 输入格式: 输入在第1行中给出一个不超过80个字符长度的.以回车结束的非空字符串:在第2行中给出一个字符. 输出格式: 在一行中按照题目要求输出结果. 输入样例1: It is a black box b 输出样例1: black box 输入样例2: It is a black box B 输出样例2: Not found #include<std

旋转数组中查找指定元素

如题,在旋转数组中查找指定元素,考虑到多种情况,网上的方法大部分没有考虑,当low,high,mid三个值相等时的情况. 代码如下: int findAll(int A[],int low,int high,int value)//当三个相等时,查找全部元素的函数. { for(int i = low;i < high;i++) { if(A[i]==value) return i; } return -1; } int find(int A[],int n,int value)//查找旋转数组

学underscore在数组中查找指定元素

前言 在开发中,我们经常会遇到在数组中查找指定元素的需求,可能大家觉得这个需求过于简单,然而如何优雅的去实现一个 findIndex 和 findLastIndex.indexOf 和 lastIndexOf 方法却是很少人去思考的.本文就带着大家一起参考着 underscore 去实现这些方法. 在实现前,先看看 ES6 的 findIndex 方法,让大家了解 findIndex 的使用方法. findIndex ES6 对数组新增了 findIndex 方法,它会返回数组中满足提供的函数的

查看Oracle表中的指定记录在数据文件中的位置

查看Oracle表中的指定记录位置select rowid,user_id from sshr.xx_user where user_id=3010586 select rowid,       dbms_rowid.rowid_object(rowid) object_id,              dbms_rowid.rowid_relative_fno(rowid) file_id,              dbms_rowid.rowid_block_number(rowid) b