1. 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[] {10643,28}; //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);//前二个参数为空,仅使用第三个参数
2. 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); |

