博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

脱机数据DataTable,DataView的排序、搜索和筛选(转)

Posted on 2008-09-03 01:45  Ran  阅读(1191)  评论(0)    收藏  举报

http://www.sz-aptech.com/learn/showArticle.aspx?ID=1794

1. DataTable的搜索和筛选功能

        根据主键值查找行

        DataRowCollectionFind方法,接受包含要找行的主键值为参数,因是根据主键值查找,所以返回一个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方法

        DataTableSelect方法接受似于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方法功能大,但行效率不高,而且WindowsWeb窗体不支持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有一个复杂的构造函数,可以TableRowFilterSortRowStateFilter属性,示例代如下:

         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);

        DataViewCount属性,返回可以通DataView看到的数据行数。

        DataRowView

        DataTableDataRow访问数据DataViewDataRowView访问数据,其功能与DataRow似。

         DataView vue=new DataView(tbl);
        DataRowView row=vue[0];
        Console.WriteLine(row[“CompanyName”]);

        DataView中搜索数据

        DataViewRowFilterRowStateFilter属性支持筛选,它支持通FindFindRows方法搜索,其用法与DataTableFind方法似。

        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方法

        DataTableFind方法根据DataTable象的PrimayKey属性中所指定的列行搜索,所以至多返回一条符合条件的数据行。DataViewFind方法根据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”);

        修改DataRowView

        DataRowView修改DataView的一行数据DataRow修改DataTable的一行数据,DataRowView象也有BeginEditEndEditCancelEditDelete方法。

        DataRowViewAddNew方法返回一个新的DataRowView象,但只到其EndEdit方法后,新行才被真正的添加到相DataTable中。

         DataView vue=new DataView(tbl);
        DataRowView row=vue.AddNew();
        row[“……”]=”…”;
        …
        row.EndEdit();

        DataViewDataTable

        DataViewToTable方法返回一个DataTable象,其中包括DataViewRowFilter属性置可的行。

         DataTable tblAllCustomers=new DataTable(“Customers”);
        DataView vue=new DataView(tblAllCustomers);
        vue.RowFilter=”Country=’Spain’”;
        DataTable tblSpanishCustomers=vue.ToTable(“SpanishCustomers”);

        以上代DataView建的DataTable将包含DataView中所有列,可以通DataViewToTable的重方法来控制生成的DataTable所包含的列。

         DataTable tblSpanishCustomers;
        tblSpanishCustomers=vue.ToTable(“SpanishCustomers”,true,
        new string[] {“City”,”Country”});

        其中第二个参数代表是否返回的新列合的果集是否是唯一。相当于SQL查询中的distinct的功能。