熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

脫機數據的排序、搜索和篩選

2022-06-13   來源: .NET編程 

   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的功能


From:http://tw.wingwit.com/Article/program/net/201311/11961.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.