知识大全 脱机数据的排序、搜索和筛选
Posted 知
篇首语:智者不为愚者谋,勇者不为怯者死。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 脱机数据的排序、搜索和筛选相关的知识,希望对你有一定的参考价值。
DataTable类的搜索和筛选功能
根据主键值查找行
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[] ; //object对象数组 DataRow row=tbl Rows Find(objCriteria);
执行动态的复杂搜索-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);//前二个参数为空 仅使用第三个参数
DataView对象
DataTable对象的Select方法功能强大 但执行效率不高 而且Windows和Web窗体不支持绑定Select方法的返回值-DataRow对象数组 DataView对象解决了以上两点不足 DataView对象不维护自己的数据附本 当通过DataView访问数据时 它将返回存储在相应DataTable中的数据
创建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看到的数据行数
DataRowView类
DataTable类通过DataRow对象访问数据项 DataView类通过DataRowView对象访问数据项 其功能与DataRow类似 DataView vue=new DataView(tbl); DataRowView row=vue[ ]; Console WriteLine(row[ CompanyName ]);
DataView中搜索数据
DataView类通过RowFilter和RowStateFilter属性支持筛选 它还支持通过Find和FindRows方法搜索 其用法与DataTable类的Find方法类似
Find方法
设置DataView对象的Sort属性后 根据Sort属性所指定的列来调用Find方法 提供一个值或一组值作为参数 Find方法的返回值是一个整型值 代表查找到的行所在DataVier中的索引 如果没查找到符合条件的值 则返回 DataView vue=new DataView(tbl); vue Sort= ContactName ; int intIndex=vue Find( Fran Wilson ); if(intIndex<> ) 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== ) Consol WriteLine( No rows Find );
修改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();
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 );
cha138/Article/program/net/201311/11961相关参考