DataTable类的搜索和筛选功能
根据主键值查找行
DataRowCollection类的Find方法接受包含要查找行的主键值为参数因为是根据主键值查找所以仅返回一个DataRow DataTable tbl=new DataTable(Customers);
daFill(tbl);
tblPrimaryKey=new DataColumn[] {tblColumns[CustomerID]};
DataRow row=tblRowsFind(ALFKI);
if((row<>null)
consolWriteLine(…);
如果主键为复合键则应将一个对象数组传递给Find方法其中数组中的项对应于包含该主键的DataColumn tblPrimaryKey=new DataColumn[] {tblColumns[OrderID]
tblColumns[ProductID]};
Object[] objCriteria=new object[] {}; //object对象数组
DataRow row=tblRowsFind(objCriteria);
执行动态的复杂搜索-Select方法
DataTable类的Select方法接受类似于SQL查询中的Where条件语句为参数返回DataRowCollection对象 DataTable tbl=new DataTable(Customers);
daFill(tbl);
sting strFilter;
strFilter=Country=USA and City <>Seattle;
foreach(DataRow row in tblSelect(strFilter))
ConsolWriteLine(…);
Select方法的参数字符串接受使用*或%作为通配符进行模糊查询例如State like New%查找State字段以New开头的数据行另外如果搜索字符串中涉及日期其值用双#包含而不使用双单引号
重载的Select 方法可包含第二个参数控制搜索结果行的排序顺序
strSortOrder=City DESC ;//搜索结果按City字段降序排列
tblSelect(strFilterstrSortOrder);
重载的Select方法亦可包含第三个参数指定DataViewRowState枚举的一个值控制Select方法仅搜索指定状态的DataRow
DataViewRowState dvrs=DataViewRowStateModifiedCurrent;
tblSelect(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();
vueTable=tbl;
或 vue=new DataView(tbl);
DataView还有一个复杂的构造函数可以设置TableRowFilterSort和RowStateFilter属性示例代码如下
vueTable=tbl;
vueRowFilter=Country=USA;
vueSort=City DESC;
DataViewRowState dvrs=DataViewRowStateModifiedOriginal;
vueRowStateFilter=dvrs; //仅查看修改过的行的原始值
或 vue=new DataView(tblCountry=USACity DESCdvrs);
DataView类的Count属性返回可以通过DataView看到的数据行数
DataRowView类
DataTable类通过DataRow对象访问数据项DataView类通过DataRowView对象访问数据项其功能与DataRow类似 DataView vue=new DataView(tbl);
DataRowView row=vue[];
ConsoleWriteLine(row[CompanyName]);
DataView中搜索数据
DataView类通过RowFilter和RowStateFilter属性支持筛选它还支持通过Find和FindRows方法搜索其用法与DataTable类的Find方法类似
Find方法
设置DataView对象的Sort属性后根据Sort属性所指定的列来调用Find方法提供一个值或一组值作为参数Find方法的返回值是一个整型值代表查找到的行所在DataVier中的索引如果没查找到符合条件的值则返回 DataView vue=new DataView(tbl);
vueSort=ContactName;
int intIndex=vueFind(Fran Wilson);
if(intIndex<>)
ConsolWriteLine(vue[intIndex][CompanyName]);
FindRows方法
DataTable的Find方法根据DataTable对象的PrimayKey属性中所指定的列进行搜索所以至多返回一条符合条件的数据行DataView的Find方法根据Sort属性所指定的列进行搜索可能有多个符合条件的值但其只返加一个符合条件的索引值
DataView类提供FindRows方法来处理其返回的多个数据行FindRows方法返回符合搜索条件的DataRowView对象数组 DataView vue=new DataView(tbl);
vueSort=Country;
DataRowView[] aRows=vueFindRows(Spain);
if(aRowsLength==)
ConsolWriteLine(No rows Find);
修改DataRowView对象
DataRowView修改DataView的一行数据类似DataRow修改DataTable的一行数据DataRowView对象也有BeginEditEndEditCancelEdit和Delete方法
DataRowView的AddNew方法返回一个新的DataRowView对象但只到其调用EndEdit方法后新行才被真正的添加到相应的DataTable中 DataView vue=new DataView(tbl);
DataRowView row=vueAddNew();
row[……]=…;
…
rowEndEdit();
DataView创建DataTable
DataView类的ToTable方法返回一个DataTable对象其中仅包括DataView的RowFilter属性设置可见的行 DataTable tblAllCustomers=new DataTable(Customers);
DataView vue=new DataView(tblAllCustomers);
vueRowFilter=Country=Spain;
DataTable tblSpanishCustomers=vueToTable(SpanishCustomers);
以上代码由DataView创建的DataTable将包含DataView中所有列可以通过DataView的ToTable的重载方法来控制生成的DataTable所包含的列 DataTable tblSpanishCustomers;
tblSpanishCustomers=vueToTable(SpanishCustomerstrue
new string[] {CityCountry});
其中第二个参数代表是否返回的新列组合的结果集是否是唯一值相当于SQL查询中的distinct的功能