• <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++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

            ADO>NET之datatable(五)

            DataTable 表示一個內存內關系數據的表,可以獨立創建和使用,也可以由其他 .NET Framework 對象使用,最常見的情況是作為 DataSet 的成員使用。

            DataTable 對象可通過使用 DataTable 構造函數來創建,或者可通過將構造函數參數傳遞到 DataSetTables 屬性的 Add 方法(它是一個 DataTableCollection)來創建。

            DataTable 對象可通過使用 DataAdapter 對象的 Fill 方法或 FillSchema 方法在 DataSet 內創建,或者可使用 DataSetReadXmlReadXmlSchema InferXmlSchema 方法從預定義的或推斷的 XML 架構中創建。請注意,將一個 DataTable 作為成員添加到一個 DataSetTables 集合中后,不能再將其添加到任何其他 DataSet 的表集合中。

            最初創建 DataTable 時,它是沒有架構(結構)的。要定義表的架構,必須創建 DataColumn 對象并將其添加到表的 Columns 集合中。您也可以為表定義主鍵列,并且可以創建 Constraint 對象并將其添加到表的 Constraints 集合中。在為 DataTable 定義了架構之后,可通過將 DataRow 對象添加到表的 Rows 集合中來將數據行添加到表。

            創建 DataTable 時,不需要為 TableName 屬性提供值,您可以在其他時間指定屬性,或者將其保留為空。但是,在將一個沒有 TableName 值的表添加到 DataSet 中時,該表會得到一個從“Table”(表示 Table0)開始遞增的默認名稱 TableN

            [C#]
            DataTable workTable = new DataTable("Customers");

            DataSet custDS = new DataSet();
            DataTable custTable = custDS.Tables.Add("CustTable");

            DataTable 包含了由表的 Columns 屬性引用的 DataColumn 對象的集合。這個列的集合與任何約束一起定義表的架構或結構。

            通過使用 DataColumn 構造函數,或者通過調用表的 Columns 屬性的 Add 方法(它是一個 DataColumnCollection),可在表內創建 DataColumn 對象。Add 方法將接受可選的 ColumnNameDataTypeExpression 參數,并將創建新的 DataColumn 作為集合的成員。它也會接受現有的 DataColumn 對象并會將其添加到集合中,并會根據請求返回對所添加的 DataColumn 的引用。由于 DataTable 對象對任何數據源都不是特定的,所以在指定 DataColumn 的數據類型時會使用 .NET Framework 類型。

            DataTable workTable = new DataTable("Customers");

            DataColumn workCol = workTable.Columns.Add("CustID", typeof(Int32));
            workCol.AllowDBNull = false;
            workCol.Unique = true;

            workTable.Columns.Add("CustLName", typeof(String));
            workTable.Columns.Add("CustFName", typeof(String));
            workTable.Columns.Add("Purchases", typeof(Double));

            請注意,示例中用于 CustID 列的屬性設置為不允許 DBNull 值并將值約束為唯一。但是,如果您將 CustID 列定義為表的主鍵列,AllowDBNull 屬性就會自動設置為 false,并且 Unique 屬性會自動設置為 true。有關更多信息,請參見為表定義主鍵

            在創建 DataTable 并使用列和約束定義其結構之后,您可以將新的數據行添加到表中。要添加新行,可將一個新變量聲明為 DataRow 類型。調用 NewRow 方法時,將返回新的 DataRow 對象。然后,DataTable 會根據表的結構按 DataColumnCollection 的定義創建 DataRow 對象。

            以下示例向新建的 Customers 表中添加了十行。

            [C#]
            DataRow workRow;
            
            for (int i = 0; i <= 9; i++) 
            {
              workRow = workTable.NewRow();
              workRow[0] = i;
              workRow[1] = "CustName" + i.ToString();
              workTable.Rows.Add(workRow);
            }

            ::

            您也可以通過傳入值的數組(類型化為 Object),調用 Add 方法來添加新行,如下例所示。

            [C#]
            workTable.Rows.Add(new Object[] {1, "Smith"});
            [C#] workRow["CustLName"] = "Smith"; workRow[1] = "Smith";
            workTable.Rows.Add(workRow);
             
            ------------------------------------------------------------

            查看表中的數據

            可以使用 DataTable RowsColumns 集合來訪問 DataTable 中的內容。也可以根據包括搜索標準、排序順序和行狀態等特定標準,
            使用 DataTable.Select 方法返回 DataTable 中數據的子集。此外,用主鍵值搜索特定行時,還可使用 DataRowCollectionFind
            方法。

            DataTable 對象的 Select 方法返回一組與指定條件匹配的 DataRow 對象。Select 采用篩選表達式、排序表達式和 DataViewRowState
            的可選參數。篩選表達式根據 DataColumn 值(例如 LastName = 'Smith'。排序表達式遵循用于為列排序的標準 SQL 約定,例如
            LastName ASC, FirstName ASC。有關編寫表達式的規則,請參見 DataColumn 類的 Expression 屬性。

            [C#] DataRow[] currRows = workTable.Select(null, null, DataViewRowState.CurrentRows); if (currRows.Length < 1 ) Console.WriteLine("No Current Rows Found"); else { foreach (DataColumn myCol in workTable.Columns) Console.Write("\t{0}", myCol.ColumnName); Console.WriteLine("\tRowState"); foreach (DataRow myRow in currRows) { foreach (DataColumn myCol in workTable.Columns) Console.Write("\t{0}", myRow[myCol]); Console.WriteLine("\t" + myRow.RowState); } }
            ------------------------------------------------------

            編輯表中的數據

            當您在 DataRow 中更改列值時,所做更改會立即置于行的 Current 狀態中。然后,RowState 會設置為 Modified,并使用 DataRow
            AcceptChangesRejectChanges 方法來接受或拒絕所做更改。DataRow 還提供了三種可用于在編輯行時將行的狀態掛起的方法。
            這些方法是 BeginEditEndEditCancelEdit

            當您直接在 DataRow 中修改列值時,DataRow 會使用 CurrentDefaultOriginal 行版本來管理列值。除這些行版本以外,
            BeginEditEndEditCancelEdit 方法還使用第四個行版本:Proposed。有關行版本的更多信息,請參見行狀態與行版本

            在執行編輯操作(通過調用 BeginEdit 開始,并且通過使用 EndEditCancelEdit 或者通過調用 AcceptChangesRejectChanges 結束)
            的過程中,Proposed 行版本會存在。

            在編輯操作過程中,您可以通過計算 DataTableColumnChanged 事件中的 ProposedValue 來將驗證邏輯應用于各列。ColumnChanged
            事件保存 DataColumnChangeEventArgs,可保持對正在更改的列和 ProposedValue 的引用。計算了建議值后,可以對其進行修改或取消編輯。
            編輯結束時,行從 Proposed 狀態中移出。

            您可以通過調用 EndEdit 來確認編輯,也可以通過調用 CancelEdit 來取消編輯。請注意,盡管 EndEdit 確實已確認您所做的編輯,但在調用
            AcceptChanges 之前,DataSet 并沒有實際接受更改。另外請注意,如果在 EndEditCancelEdit 編輯結束之前調用 AcceptChanges
            編輯將會終止,并接受 CurrentOriginal 行版本的 Proposed 行值。調用 RejectChanges 會以同樣的方式結束編輯,并放棄 Current
            Proposed 行版本。在調用 AcceptChangesRejectChanges 之后調用 EndEditCancelEdit 不會起作用,因為編輯已經結束。


            [C#] DataTable workTable = new DataTable(); workTable.Columns.Add("LastName", typeof(String)); workTable.ColumnChanged += new DataColumnChangeEventHandler(OnColumnChanged); DataRow workRow = workTable.NewRow(); workRow[0] = "Smith"; workTable.Rows.Add(workRow); workRow.BeginEdit(); // Causes the ColumnChanged event to write a message and cancel the edit. workRow[0] = ""; workRow.EndEdit(); // Displays "Smith, New". Console.WriteLine("{0}, {1}", workRow[0], workRow.RowState); protected static void OnColumnChanged(Object sender, DataColumnChangeEventArgs args) { if (args.Column.ColumnName == "LastName") if (args.ProposedValue.ToString() == "") { Console.WriteLine("Last Name cannot be blank. Edit canceled."); args.Row.CancelEdit(); } }

            posted on 2005-11-24 12:06 夢在天涯 閱讀(1712) 評論(0)  編輯 收藏 引用 所屬分類: C#/.NET

            公告

            EMail:itech001#126.com

            導航

            統計

            • 隨筆 - 461
            • 文章 - 4
            • 評論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1804314
            • 排名 - 5

            最新評論

            閱讀排行榜

            亚洲а∨天堂久久精品9966| 精品综合久久久久久888蜜芽| 91久久精一区二区三区大全| 伊人久久大香线蕉综合Av | 久久久久婷婷| 亚洲成色999久久网站| 青青草原1769久久免费播放| 99久久精品国内| 青青草国产精品久久| 国内精品伊人久久久久网站| 久久精品国产精品亚洲艾草网美妙| 国产精品综合久久第一页| 91精品国产综合久久四虎久久无码一级 | 久久久久九国产精品| 久久久综合香蕉尹人综合网| 久久久久人妻精品一区三寸蜜桃| 亚洲一区精品伊人久久伊人| 久久国语露脸国产精品电影| 久久精品午夜一区二区福利| 亚洲国产成人久久综合碰碰动漫3d | 国内精品久久久久影院老司| 97精品国产97久久久久久免费| 久久久久亚洲AV无码麻豆| 日韩精品国产自在久久现线拍| 久久人妻少妇嫩草AV无码蜜桃| 99精品国产综合久久久久五月天| 久久久av波多野一区二区| 国产农村妇女毛片精品久久| 2021国产精品午夜久久 | 国产精品久久久久无码av| 国产精品女同一区二区久久| 久久精品国产亚洲AV香蕉| 久久99国产精品99久久| 久久伊人精品一区二区三区 | AV无码久久久久不卡蜜桃| 久久精品中文字幕第23页| 久久天天躁狠狠躁夜夜躁2O2O| 久久亚洲国产精品一区二区| 欧美日韩精品久久久免费观看| 久久不见久久见免费视频7| 合区精品久久久中文字幕一区 |