• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C++ Programmer's Cookbook

            {C++ 基礎(chǔ)} {C++ 高級(jí)} {C#界面,C++核心算法} {設(shè)計(jì)模式} {C#基礎(chǔ)}

            ADO。NET之dataview(六)

            DataView 使您能夠創(chuàng)建 DataTable 中所存儲(chǔ)的數(shù)據(jù)的不同視圖,這種功能通常用于數(shù)據(jù)綁定應(yīng)用程序。使用 DataView,您可以公開表中具有不同排序順序的數(shù)據(jù),并且可以按行狀態(tài)或基于篩選器表達(dá)式來篩選數(shù)據(jù)。

            DataView 提供數(shù)據(jù)的動(dòng)態(tài)視圖,其內(nèi)容、排序和成員關(guān)系會(huì)實(shí)時(shí)反映對(duì)基礎(chǔ) DataTable 的更改。它不同于 DataTableSelect 方法,后者從表中按特定的篩選器和/或排序順序返回 DataRow 數(shù)組,雖然其內(nèi)容反映對(duì)基礎(chǔ)表的更改,但其成員關(guān)系和排序卻則保持靜態(tài)。DataView 的動(dòng)態(tài)功能使其成為數(shù)據(jù)綁定應(yīng)用程序的理想選擇。

            與數(shù)據(jù)庫(kù)提供的視圖類似,DataView 為您提供了可向其應(yīng)用不同排序和篩選條件的單個(gè)數(shù)據(jù)集的動(dòng)態(tài)視圖。但是,DataView 和數(shù)據(jù)庫(kù)視圖之間相當(dāng)不同的一點(diǎn)在于 DataView 不能作為表來進(jìn)行處理,并且不能提供聯(lián)接表的視圖。另外,還不能排除存在于源表中的列,也不能追加不存在于源表中的列(如計(jì)算列)。

            可以使用 DataViewManager 來管理 DataSet 中所有表的視圖設(shè)置。DataViewManager 為您提供了一種方便的方法來管理每個(gè)表的默認(rèn)視圖設(shè)置。在將一個(gè)控件綁定到 DataSet 的多個(gè)表時(shí),綁定到 DataViewManager 是理想的選擇。

            創(chuàng)建:

            創(chuàng)建 DataView 的方法有兩種。可以使用 DataView 構(gòu)造函數(shù),也可以創(chuàng)建對(duì) DataTableDefaultView 屬性的引用。DataView 構(gòu)造函數(shù)可以為空,也可以通過單個(gè)參數(shù)的形式采用 DataTable 或者同時(shí)采用 DataTable 與篩選條件、排序條件和行狀態(tài)篩選器。
            [C#]
            DataView custDV = new DataView(custDS.Tables["Customers"],
                                           "Country = 'USA'",
                                           "ContactName",
                                           DataViewRowState.CurrentRows);
            DataView custDV = custDS.Tables["Customers"].DefaultView;

            使用 DataView 對(duì)數(shù)據(jù)排序和篩選

            DataView 提供了幾項(xiàng)用于對(duì) DataTable 中的數(shù)據(jù)進(jìn)行排序和篩選的功能:

            • 使用 Sort 屬性,您可以指定單個(gè)或多個(gè)列排序順序并包含 ASC(升序)和 DESC(降序)參數(shù)。
            • 可以使用 ApplyDefaultSort 屬性自動(dòng)以升序創(chuàng)建基于表的一個(gè)或多個(gè)主鍵列的排序順序。只有當(dāng) Sort 屬性為空引用或空字符串時(shí)以及表已定義主鍵時(shí),ApplyDefaultSort 才適用。
            • 使用 RowFilter 屬性,您可以根據(jù)行的列值來指定行的子集。有關(guān) RowFilter 屬性的有效表達(dá)式的更多信息,請(qǐng)參見有關(guān) DataColumn 類的 Expression 屬性的參考信息。

              如果要返回對(duì)數(shù)據(jù)的特定查詢的結(jié)果(而不是提供數(shù)據(jù)子集的動(dòng)態(tài)視圖)以實(shí)現(xiàn)最佳性能,請(qǐng)使用 DataViewFindFindRows 方法,而不是設(shè)置 RowFilter 屬性。設(shè)置 RowFilter 屬性會(huì)使數(shù)據(jù)的索引被重新生成,從而增加應(yīng)用程序的系統(tǒng)開銷并降低性能。最好將 RowFilter 屬性用于其中的綁定控件顯示篩選結(jié)果的數(shù)據(jù)綁定應(yīng)用程序。FindFindRows 方法會(huì)利用當(dāng)前的索引,而不需要重新生成索引。有關(guān) FindFindRows 方法的更多信息,請(qǐng)參見搜索 DataView

            • 使用 RowStateFilter 屬性,您可以指定要查看的行版本。DataView 根據(jù)基礎(chǔ)行的 RowState 來隱式地管理要公開哪些行版本。例如,如果 RowStateFilter 設(shè)置為 DataViewRowState.Deleted,由于不存在 Current 行版本,DataView 將公開所有 Deleted 行的 Original 行版本。可以使用 DataRowView RowVersion 屬性來確定要公開行的哪些行版本。

            [C#]
            DataView prodView = new DataView(prodDS.Tables["Products"],
                                             "UnitsInStock <= ReorderLevel",
                                             "SupplierID, ProductName",
                                             DataViewRowState.CurrentRows);

            --------------------------------------------------------------------------

            查看 DataView 的內(nèi)容

            DataView 公開可枚舉的 DataRowView 對(duì)象集合。DataRowView 對(duì)象將值公開為 object 數(shù)組,這些數(shù)組按基礎(chǔ)表中列的名稱或序號(hào)引用來編制索引。可以使用 DataRowViewRow 屬性來訪問由 DataRowView 公開的 DataRow

            當(dāng)使用 DataRowView 查看值時(shí),DataViewRowStateFilter 屬性將確定公開基礎(chǔ) DataRow 的哪一個(gè)行版本。
            [C#]
              DataView catView = new DataView(catDS.Tables["Categories"]);

              Console.WriteLine("Current Values:");

              WriteView(catView);

              Console.WriteLine("Original Values:");

              catView.RowStateFilter = DataViewRowState.ModifiedOriginal;

              WriteView(catView);

            public static void WriteView(DataView myView)
            {
              foreach (DataRowView myDRV in myView)
              {
                for (int i = 0; i < myView.Table.Columns.Count; i++)
                  Console.Write(myDRV[i] + "\t");
                Console.WriteLine();
              }
            }

            -------------------------------------------------------------------------------------------------------------

            使用 DataView 修改數(shù)據(jù)

            可以使用 DataView 在基礎(chǔ)表中添加、刪除或修改數(shù)據(jù)行。通過設(shè)置 DataView 的三個(gè)布爾值屬性之一,可以控制使用 DataView 修改基礎(chǔ)表數(shù)據(jù)的能力。這些屬性為 AllowNewAllowEditAllowDelete。默認(rèn)情況下,它們?cè)O(shè)置為 true

            如果 AllowNewtrue,則可以使用 DataView AddNew 方法來創(chuàng)建新的 DataRowView。請(qǐng)注意,在調(diào)用 DataRowViewEndEdit 方法之前,新行實(shí)際上不會(huì)添加到基礎(chǔ) DataTable 中。如果調(diào)用 DataRowViewCancelEdit 方法,則將丟棄新行。另請(qǐng)注意,一次只能編輯一個(gè) DataRowView。如果在存在掛起行時(shí)調(diào)用 DataRowViewAddNewBeginEdit 方法,則會(huì)對(duì)該掛起行隱式調(diào)用 EndEdit。當(dāng)調(diào)用 EndEdit 時(shí),更改將應(yīng)用于基礎(chǔ) DataTable,并且隨后可以使用 DataTableDataSetDataRow 對(duì)象的 AcceptChangesRejectChanges 方法來提交或拒絕更改。如果 AllowNewfalse,則當(dāng)調(diào)用 DataRowView AddNew 方法時(shí),將引發(fā)異常。

            如果 AllowEdittrue,可以通過 DataRowView 來修改 DataRow 的內(nèi)容。您可以使用 DataRowView.EndEdit 確認(rèn)對(duì)基礎(chǔ)行的更改,或使用 DataRowView.CancelEdit 拒絕更改。請(qǐng)注意,一次只能編輯一行。如果在存在掛起行時(shí)調(diào)用 DataRowViewAddNewBeginEdit 方法,則將對(duì)掛起行隱式調(diào)用 EndEdit。當(dāng)調(diào)用 EndEdit 時(shí),建議更改將放置在基礎(chǔ) DataRowCurrent 行版本中,隨后可以使用 DataTableDataSetDataRow 對(duì)象的 AcceptChangesRejectChanges 方法來提交或拒絕這些更改。如果 AllowEditfalse,則當(dāng)試圖修改 DataView 中的值時(shí),將引發(fā)異常。

            當(dāng)編輯現(xiàn)有 DataRowView 時(shí),仍將引發(fā)基礎(chǔ) DataTable 的事件,并提供建議更改。請(qǐng)注意,如果對(duì)基礎(chǔ) DataRow 調(diào)用 EndEditCancelEdit,那么無論是否對(duì) DataRowView 調(diào)用 EndEditCancelEdit,都將應(yīng)用或取消掛起的更改。

            如果 AllowDeletetrue,則可以使用 DataViewDataRowView 對(duì)象的 Delete 方法刪除 DataView 中的行,這些行也將從基礎(chǔ) DataTable 中刪除。隨后可以分別使用 AcceptChangesRejectChanges 來提交或拒絕刪除。如果 AllowDeletefalse,當(dāng)調(diào)用 DataViewDataRowViewDelete 方法時(shí),將引發(fā)異常。

            以下代碼示例禁用通過 DataView 刪除行的功能,并使用 DataView 向基礎(chǔ)表中添加新行。

            [C#]
            DataTable custTable = custDS.Tables["Customers"];
            DataView custView = custTable.DefaultView;
            custView.Sort = "CompanyName";

            custView.AllowDelete = false;

            DataRowView newDRV = custView.AddNew();
            newDRV["CustomerID"] = "ABCDE";
            newDRV["CompanyName"] = "ABC Products";
            newDRV.EndEdit();

            posted on 2005-11-24 12:23 夢(mèng)在天涯 閱讀(1193) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C#/.NET

            公告

            EMail:itech001#126.com

            導(dǎo)航

            統(tǒng)計(jì)

            • 隨筆 - 461
            • 文章 - 4
            • 評(píng)論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1804603
            • 排名 - 5

            最新評(píng)論

            閱讀排行榜

            久久久无码精品亚洲日韩蜜臀浪潮 | 日本WV一本一道久久香蕉| 国产精品美女久久久m| 亚洲日本va中文字幕久久| 久久天天躁狠狠躁夜夜不卡| 欧美久久天天综合香蕉伊| 久久久久亚洲爆乳少妇无| 国产高潮久久免费观看| 国产成人香蕉久久久久| 久久综合九色欧美综合狠狠 | 99久久成人18免费网站| 国产日产久久高清欧美一区| 久久精品一区二区国产| 久久综合九色综合久99| 国内精品久久久久久久久| 久久青青草原亚洲av无码| 伊人热热久久原色播放www| 亚洲色欲久久久综合网东京热| 亚洲第一极品精品无码久久| 久久一日本道色综合久久| 97精品伊人久久大香线蕉app| 91精品国产高清久久久久久国产嫩草| 成人精品一区二区久久| 久久久综合香蕉尹人综合网| 久久精品国产亚洲AV忘忧草18 | 久久久久久国产a免费观看黄色大片| 伊色综合久久之综合久久| 色狠狠久久AV五月综合| 99久久亚洲综合精品成人| 亚洲国产高清精品线久久| 久久综合噜噜激激的五月天| 久久青草国产手机看片福利盒子| 欧美日韩精品久久久免费观看| 一本色道久久综合亚洲精品| AAA级久久久精品无码区| 久久无码AV一区二区三区| 久久91亚洲人成电影网站| 思思久久精品在热线热| 久久亚洲国产欧洲精品一| 亚洲伊人久久成综合人影院 | 偷窥少妇久久久久久久久|