1. DataTable类的搜索和筛选功能 
l 根据主键值查找行 
DataRowCollection类的Find方法,接受包含要查找行的主键值为参数,因为是根据主键值查找,所以仅返回一个DataRow。 
DataTable tbl=new DataTable(“Customers”); 
da.Fill(tbl); 
tbl.PrimaryKey=new DataColumn[] {tbl.Columns[“CustomerID”]}; 
DataRow row=tbl.Rows.Find(“ALFKI”); 
if((row<>null) 
consol.WriteLine(…); 
如果主键为复合键,则应将一个对象数组传递给Find方法,其中数组中的项对应于包含该主键的DataColumn。 
tbl.PrimaryKey=new DataColumn[] {tbl.Columns[“OrderID”], 
tbl.Columns[“ProductID”]}; 
Object[] objCriteria=new object[] {10643,28}; //object对象数组 
DataRow row=tbl.Rows.Find(objCriteria); 
l 执行动态的复杂搜索-Select方法 
DataTable类的Select方法接受类似于SQL查询中的Where条件语句为参数,返回DataRowCollection对象。 
DataTable tbl=new DataTable(“Customers”); 
da.Fill(tbl); 
sting strFilter; 
strFilter=”Country=’USA’ and City <>’Seattle’”; 
foreach(DataRow row in tbl.Select(strFilter)) 
Consol.WriteLine(…); 
Select方法的参数字符串接受使用*或%作为通配符进行模糊查询,例如”State like ‘New%’”查找State字段以”New”开头的数据行。另外如果搜索字符串中涉及日期,其值用双#包含而不使用双单引号。 
重载的Select 方法可包含第二个参数,控制搜索结果行的排序顺序。 
strSortOrder=”City DESC” ;//搜索结果按City字段降序排列 
tbl.Select(strFilter,strSortOrder); 
重载的Select方法亦可包含第三个参数,指定DataViewRowState枚举的一个值,控制Select方法仅搜索指定状态的DataRow。 
DataViewRowState dvrs=DataViewRowState.ModifiedCurrent; 
tbl.Select(“”,””,dvrs);//前二个参数为空,仅使用第三个参数 
2. DataView对象 
DataTable对象的Select方法功能强大,但执行效率不高,而且Windows和Web窗体不支持绑定Select方法的返回值-DataRow对象数组。DataView对象解决了以上两点不足。DataView对象不维护自己的数据附本,当通过DataView访问数据时,它将返回存储在相应DataTable中的数据。 
l 创建DataView对象 
DataView对象必需与DataTable对象相关联,以下几种构造函数可以创建DataTable对象并与DataTable相关联。 
DataTable tbl=new DataTable(“MyTable”); 
DataView vue; 
vue=new DataView(); 
vue.Table=tbl; 
或 vue=new DataView(tbl); 
DataView还有一个复杂的构造函数,可以设置Table、RowFilter、Sort和RowStateFilter属性,示例代码如下: 
vue.Table=tbl; 
vue.RowFilter=”Country=’USA’”; 
vue.Sort=”City DESC”; 
DataViewRowState dvrs=DataViewRowState.ModifiedOriginal; 
vue.RowStateFilter=dvrs; //仅查看修改过的行的原始值 
或 vue=new DataView(tbl,”Country=’USA’”,”City DESC”,dvrs); 
DataView类的Count属性,返回可以通过DataView看到的数据行数。 
l DataRowView类 
DataTable类通过DataRow对象访问数据项;DataView类通过DataRowView对象访问数据项,其功能与DataRow类似。 
DataView vue=new DataView(tbl); 
DataRowView row=vue[0]; 
Console.WriteLine(row[“CompanyName”]); 
l DataView中搜索数据 
DataView类通过RowFilter和RowStateFilter属性支持筛选,它还支持通过Find和FindRows方法搜索,其用法与DataTable类的Find方法类似。 
Find方法 
设置DataView对象的Sort属性后,根据Sort属性所指定的列来调用Find方法,提供一个值或一组值作为参数。Find方法的返回值是一个整型值,代表查找到的行所在DataVier中的索引,如果没查找到符合条件的值,则返回-1。 
DataView vue=new DataView(tbl); 
vue.Sort=”ContactName”; 
int intIndex=vue.Find(“Fran Wilson”); 
if(intIndex<>-1) 
Consol.WriteLine(vue[intIndex][“CompanyName”]); 
FindRows方法 
DataTable的Find方法根据DataTable对象的PrimayKey属性中所指定的列进行搜索,所以至多返回一条符合条件的数据行。DataView的Find方法根据Sort属性所指定的列进行搜索,可能有多个符合条件的值,但其只返加一个符合条件的索引值。 
DataView类提供FindRows方法来处理其返回的多个数据行,FindRows方法返回符合搜索条件的DataRowView对象数组。 
DataView vue=new DataView(tbl); 
vue.Sort=”Country”; 
DataRowView[] aRows=vue.FindRows(“Spain”); 
if(aRows.Length==0) 
Consol.WriteLine(“No rows Find”); 
l 修改DataRowView对象 
DataRowView修改DataView的一行数据类似DataRow修改DataTable的一行数据,DataRowView对象也有BeginEdit、EndEdit、CancelEdit和Delete方法。 
DataRowView的AddNew方法返回一个新的DataRowView对象,但只到其调用EndEdit方法后,新行才被真正的添加到相应的DataTable中。 
DataView vue=new DataView(tbl); 
DataRowView row=vue.AddNew(); 
row[“……”]=”…”; 
… 
row.EndEdit(); 
l DataView创建DataTable 
DataView类的ToTable方法返回一个DataTable对象,其中仅包括DataView的RowFilter属性设置可见的行。 
DataTable tblAllCustomers=new DataTable(“Customers”); 
DataView vue=new DataView(tblAllCustomers); 
vue.RowFilter=”Country=’Spain’”; 
DataTable tblSpanishCustomers=vue.ToTable(“SpanishCustomers”); 
以上代码由DataView创建的DataTable将包含DataView中所有列,可以通过DataView的ToTable的重载方法来控制生成的DataTable所包含的列。 
DataTable tblSpanishCustomers; 
tblSpanishCustomers=vue.ToTable(“SpanishCustomers”,true, 
new string[] {“City”,”Country”}); 
其中第二个参数代表是否返回的新列组合的结果集是否是唯一值。相当于SQL查询中的distinct的功能。
posted on 2009-09-10 17:45  赵保龙  阅读(1162)  评论(1编辑  收藏  举报