DataTable
是一個臨時保存數據的格線虛擬表(表示記憶體中數據的一個表。)。DataTable是ADO dot net 庫中的核心對象。它可以被套用在 VB 和 ASP 上。它無須代碼就可以簡單的綁定資料庫。它具有微軟風格的用戶界面。
其他使用DataTable的對象包括DataSet和DataView。
基本介紹
- 中文名:數據表
- 外文名:DataTable
- 屬於:臨時保存數據的格線虛擬表
- 類別:ADO dot net 庫中的核心對象
- 套用:VB和ASP 上
概述
注意事項
用法介紹
- 向數據表中添加數據
- 說明如何創建新行並將它們添加到表中。
- 查看數據表中的數據
- 說明如何訪問行中的數據,包括數據的原始版本和當前版本。
- Load 方法
- 說明如何通過 Load 方法使用行填充 DataTable。
- DataTable 編輯
- 說明如何修改行中的數據,包括掛起對行的更改,直至驗證並接受了建議的更改。
- 行狀態與行版本
- 提供有關行的不同狀態的信息。
- DataRow 刪除
- 說明如何從表中移除行。
- 行錯誤信息
- 說明如何插入每行的錯誤信息,幫助解決應用程式中的數據問題。
- AcceptChanges 和 RejectChanges
- 說明如何接受或拒絕對行的更改。
名稱 | 說明 | |
---|---|---|
DataTable() | 不帶參數初始化 DataTable 類的新實例。 | |
DataTable(String) | 用指定的表名初始化 DataTable 類的新實例。 | |
DataTable(SerializationInfo, StreamingContext) | 使用 SerializationInfo 和 StreamingContext 初始化 DataTable 類的新實例。 | |
DataTable(String, String) | 用指定的表名和命名空間初始化 DataTable 類的新實例。 |
名稱 | 說明 | |
---|---|---|
CaseSensitive | 指示表中的字元串比較是否區分大小寫。 | |
ChildRelations | 獲取此 DataTable 的子關係的集合。 | |
Columns | 獲取屬於該表的列的集合。 | |
Constraints | 獲取由該表維護的約束的集合。 | |
Container | 獲取組件的容器。 (繼承自 MarshalByValueComponent。) | |
DataSet | 獲取此表所屬的 DataSet。 | |
DefaultView | 獲取可能包括篩選視圖或游標位置的表的自定義視圖。 | |
DesignMode | 獲取指示組件當前是否處於設計模式的值。 (繼承自 MarshalByValueComponent。) | |
DisplayExpression | 獲取或設定一個表達式,該表達式返回的值用於表示用戶界面中的此表。 DisplayExpression 屬性用於在用戶界面中顯示此表的名稱。 | |
Events | 獲取附加到該組件的事件處理程式的列表。 (繼承自 MarshalByValueComponent。) | |
ExtendedProperties | 獲取自定義用戶信息的集合。 | |
HasErrors | 獲取一個值,該值指示該表所屬的 DataSet 的任何表的任何行中是否有錯誤。 | |
IsInitialized | 獲取一個值,該值指示是否已初始化 DataTable。 | |
Locale | 獲取或設定用於比較表中字元串的區域設定信息。 | |
MinimumCapacity | 獲取或設定該表最初的起始大小。 | |
Namespace | 獲取或設定 DataTable 中所存儲數據的 XML 表示形式的命名空間。 | |
ParentRelations | 獲取該 DataTable 的父關係的集合。 | |
Prefix | 獲取或設定 DataTable 中所存儲數據的 XML 表示形式的命名空間。 | |
PrimaryKey | 獲取或設定充當數據表主鍵的列的數組。 | |
RemotingFormat | 獲取或設定序列化格式。 | |
Rows | 獲取屬於該表的行的集合。 | |
Site | 獲取或設定 DataTable 的 System.ComponentModel.ISite。 (重寫 MarshalByValueComponent.Site。) | |
TableName | 獲取或設定 DataTable 的名稱。 |
名稱 | 說明 | |
---|---|---|
IListSource.GetList | 有關此成員的說明,請參見 IListSource.GetList。 | |
IXmlSerializable.GetSchema | 有關此成員的說明,請參見 IXmlSerializable.GetSchema。 | |
IXmlSerializable.ReadXml | 有關此成員的說明,請參見 IXmlSerializable.ReadXml。 | |
IXmlSerializable.WriteXml | 有關此成員的說明,請參見 IXmlSerializable.WriteXml。 |
名稱 | 說明 | |
---|---|---|
AcceptChanges | 提交自上次調用 AcceptChanges 以來對該表進行的所有更改。 | |
BeginInit | 開始初始化在窗體上使用或由另一個組件使用的 DataTable。 初始化發生在運行時。 | |
BeginLoadData | 在載入數據時關閉通知、索引維護和約束。 | |
Clear | 清除所有數據的 DataTable。 | |
Clone | 克隆 DataTable 的結構,包括所有 DataTable 架構和約束。 | |
Compute | 計算用來傳遞篩選條件的當前行上的給定表達式。 | |
Copy | 複製該 DataTable 的結構和數據。 | |
CreateDataReader | 返回與此 DataTable 中的數據相對應的 DataTableReader。 | |
CreateInstance | 基礎結構。創建 DataTable 的一個新實例。 | |
Dispose() | 釋放由 MarshalByValueComponent 使用的所有資源。 (繼承自 MarshalByValueComponent。) | |
Dispose(Boolean) | 釋放由 MarshalByValueComponent 占用的非託管資源,還可以另外再釋放託管資源。 (繼承自 MarshalByValueComponent。) | |
EndInit | 結束在窗體上使用或由另一個組件使用的 DataTable 的初始化。 初始化發生在運行時。 | |
EndLoadData | 在載入數據後打開通知、索引維護和約束。 | |
Equals(Object) | 確定指定的對象是否等於當前對象。 (繼承自 Object。) | |
Finalize | 允許對象在“垃圾回收”回收之前嘗試釋放資源並執行其他清理操作。 (繼承自 MarshalByValueComponent。) | |
GetChanges() | 獲取 DataTable 的副本,該副本包含自載入以來或自上次調用 AcceptChanges 以來對該數據集進行的所有更改。 | |
GetChanges(DataRowState) | 獲取由 DataRowState 篩選的 DataTable 的副本,該副本包含上次載入以來或調用 AcceptChanges 以來對該數據集進行的所有更改。 | |
GetDataTableSchema | 該方法返回一個包含 Web 服務描述語言 (WSDL) 的 XmlSchemaSet 實例,該語言描述了用作 Web 服務的 DataTable。 | |
GetErrors | 獲取包含錯誤的 DataRow 對象的數組。 | |
GetHashCode | 作為默認哈希函式。 (繼承自 Object。) | |
GetObjectData | 用序列化 DataTable 所需的數據填充序列化信息對象。 | |
GetRowType | 基礎結構。獲取行類型。 | |
GetSchema | 基礎結構。有關此成員的說明,請參見 IXmlSerializable.GetSchema。 | |
GetService | 獲取 IServiceProvider 的實施者。 (繼承自 MarshalByValueComponent。) | |
GetType | 獲取當前實例的 Type。 (繼承自 Object。) | |
ImportRow | 將 DataRow 複製到 DataTable 中,保留任何屬性設定以及初始值和當前值。 | |
Load(IDataReader) | 通過所提供的 IDataReader,用某個數據源的值填充 DataTable。 如果 DataTable 已經包含行,則從數據源傳入的數據將與現有的行合併。 | |
Load(IDataReader, LoadOption) | 通過所提供的 IDataReader,用某個數據源的值填充 DataTable。 如果 DataTable 已包含行,則從數據源傳入的數據將根據loadOption 參數的值與現有的行合併。 | |
Load(IDataReader, LoadOption, FillErrorEventHandler) | 通過所提供的使用錯誤處理委託的 IDataReader 用某個數據源中的值填充 DataTable。 | |
LoadDataRow(Object[], Boolean) | 查找和更新特定行。 如果找不到任何匹配行,則使用給定值創建新行。 | |
LoadDataRow(Object[], LoadOption) | 查找和更新特定行。 如果找不到任何匹配行,則使用給定值創建新行。 | |
MemberwiseClone | 創建當前 Object 的淺表副本。 (繼承自 Object。) | |
Merge(DataTable) | 將指定的 DataTable 與當前的 DataTable 合併。 | |
Merge(DataTable, Boolean) | 將指定的 DataTable 與當前的 DataTable 合併,指示是否在當前的 DataTable 中保留更改。 | |
Merge(DataTable, Boolean, MissingSchemaAction) | 將指定的 DataTable 與當前的 DataTable 合併,指示是否在當前的 DataTable 中保留更改以及如何處理缺失的架構。 | |
NewRow | 創建與該表具有相同架構的新 DataRow。 | |
NewRowArray | 基礎結構。返回 DataRow 的數組。 | |
NewRowFromBuilder | 從現有的行創建新行。 | |
OnColumnChanged | 引發 ColumnChanged 事件。 | |
OnColumnChanging | 引發 ColumnChanging 事件。 | |
OnPropertyChanging | 引發 PropertyChanged 事件。 | |
OnRemoveColumn | 通知 DataTable:DataColumn 正在被移除。 | |
OnRowChanged | 引發 RowChanged 事件。 | |
OnRowChanging | 引發 RowChanging 事件。 | |
OnRowDeleted | 引發 RowDeleted 事件。 | |
OnRowDeleting | 引發 RowDeleting 事件。 | |
OnTableCleared | 引發 TableCleared 事件。 | |
OnTableClearing | 引發 TableClearing 事件。 | |
OnTableNewRow | 引發 TableNewRow 事件。 | |
ReadXml(Stream) | 使用指定的 Stream 將 XML 架構和數據讀入 DataTable。 | |
ReadXml(String) | 將指定檔案中的 XML 架構和數據讀入 DataTable 中。 | |
ReadXml(TextReader) | 使用指定的 TextReader 將 XML 架構和數據讀入 DataTable。 | |
ReadXml(XmlReader) | 使用指定的 XmlReader 將 XML 架構和數據讀入 DataTable。 | |
ReadXmlSchema(Stream) | 使用指定流將 XML 架構讀入 DataTable 中。 | |
ReadXmlSchema(String) | 將指定檔案中的 XML 架構讀入 DataTable 中。 | |
ReadXmlSchema(TextReader) | 使用指定的 TextReader 將 XML 架構讀入 DataTable 中。 | |
ReadXmlSchema(XmlReader) | 使用指定的 XmlReader 將 XML 架構讀入 DataTable 中。 | |
ReadXmlSerializable | 基礎結構。從 XML 流中讀取。 | |
RejectChanges | 回滾自該表載入以來或上次調用 AcceptChanges 以來對該表進行的所有更改。 | |
Reset | 將 DataTable 重置為其初始狀態。 重置將移除表的所有數據、索引、關係和列。 如果數據集包含一個數據表,則在重置該表之後,它將仍是數據集的一部分。 | |
Select() | 獲取所有 DataRow 對象的數組。 | |
Select(String) | 獲取按與篩選條件相匹配的所有 DataRow 對象的數組。 | |
Select(String, String) | 獲取按照指定的排序順序且與篩選條件相匹配的所有 DataRow 對象的數組。 | |
Select(String, String, DataViewRowState) | 獲取與排序順序中的篩選器以及指定的狀態相匹配的所有 DataRow 對象的數組。 | |
ToString | 獲取 TableName 和 DisplayExpression(如果有一個用作連線字元串)。 (重寫 MarshalByValueComponent.ToString()。) | |
WriteXml(Stream) | 使用指定的 Stream 以 XML 格式寫入 DataTable 的當前內容。 | |
WriteXml(String) | 使用指定的檔案以 XML 格式寫入 DataTable 的當前內容。 | |
WriteXml(TextWriter) | 使用指定的 TextWriter 以 XML 格式寫入 DataTable 的當前內容。 | |
WriteXml(XmlWriter) | 使用指定的 XmlWriter 以 XML 格式寫入 DataTable 的當前內容。 | |
WriteXml(Stream, Boolean) | 使用指定的 Stream 以 XML 格式寫入 DataTable 的當前內容。 若要保存該表及其所有子代的數據,請將 writeHierarchy 參數設定為 true。 | |
WriteXml(Stream, XmlWriteMode) | 使用指定的 XmlWriteMode 將 DataTable 的當前數據寫入指定的檔案,還可以選擇將架構寫入指定的檔案。 若要寫架構,請將mode 參數的值設定為 WriteSchema。 | |
WriteXml(String, Boolean) | 使用指定的檔案以 XML 格式寫入 DataTable 的當前內容。 若要保存該表及其所有子代的數據,請將 writeHierarchy 參數設定為true。 | |
WriteXml(String, XmlWriteMode) | 使用指定的檔案和 XmlWriteMode,寫入 DataTable 的當前數據(還可以選擇寫入架構)。 若要寫架構,請將 mode 參數的值設定為 WriteSchema。 | |
WriteXml(TextWriter, Boolean) | 使用指定的 TextWriter 以 XML 格式寫入 DataTable 的當前內容。 若要保存該表及其所有子代的數據,請將 writeHierarchy 參數設定為 true。 | |
WriteXml(TextWriter, XmlWriteMode) | 使用指定的 TextWriter 和 XmlWriteMode 寫入 DataTable 的當前數據,還可以選擇寫入架構。 若要寫架構,請將 mode 參數的值設定為 WriteSchema。 | |
WriteXml(XmlWriter, Boolean) | 使用指定的 XmlWriter 以 XML 格式寫入 DataTable 的當前內容。 | |
WriteXml(XmlWriter, XmlWriteMode) | 使用指定的 XmlWriter 和 XmlWriteMode 寫入 DataTable 的當前數據,還可以選擇寫入架構。 若要寫架構,請將 mode 參數的值設定為 WriteSchema。 | |
WriteXml(Stream, XmlWriteMode, Boolean) | 使用指定的 XmlWriteMode 將 DataTable 的當前數據寫入指定的檔案,還可以選擇將架構寫入指定的檔案。 若要寫架構,請將mode 參數的值設定為 WriteSchema。 若要保存該表及其所有子代的數據,請將 writeHierarchy 參數設定為 true。 | |
WriteXml(String, XmlWriteMode, Boolean) | 使用指定的檔案和 XmlWriteMode,寫入 DataTable 的當前數據(還可以選擇寫入架構)。 若要寫架構,請將 mode 參數的值設定為 WriteSchema。 若要保存該表及其所有子代的數據,請將 writeHierarchy 參數設定為 true。 | |
WriteXml(TextWriter, XmlWriteMode, Boolean) | 使用指定的 TextWriter 和 XmlWriteMode 寫入 DataTable 的當前數據,還可以選擇寫入架構。 若要寫架構,請將 mode 參數的值設定為 WriteSchema。 若要保存該表及其所有子代的數據,請將 writeHierarchy 參數設定為 true。 | |
WriteXml(XmlWriter, XmlWriteMode, Boolean) | 使用指定的 XmlWriter 和 XmlWriteMode 寫入 DataTable 的當前數據,還可以選擇寫入架構。 若要寫架構,請將 mode 參數的值設定為 WriteSchema。 若要保存該表及其所有子代的數據,請將 writeHierarchy 參數設定為 true。 | |
WriteXmlSchema(Stream) | 將 DataTable 的當前數據結構以 XML 架構形式寫入指定的流。 | |
WriteXmlSchema(String) | 將 DataTable 的當前數據結構以 XML 架構形式寫入指定的檔案。 | |
WriteXmlSchema(TextWriter) | 使用指定的 TextWriter 將 DataTable 的當前數據結構編寫為 XML 架構。 | |
WriteXmlSchema(XmlWriter) | 使用指定的 XmlWriter 將 DataTable 的當前數據結構以 XML 架構形式寫入。 | |
WriteXmlSchema(Stream, Boolean) | 將 DataTable 的當前數據結構以 XML 架構形式寫入指定的流。 若要保存該表及其所有子代的架構,請將 writeHierarchy 參數設定為 true。 | |
WriteXmlSchema(String, Boolean) | 將 DataTable 的當前數據結構以 XML 架構形式寫入指定的檔案。 若要保存該表及其所有子代的架構,請將 writeHierarchy 參數設定為 true。 | |
WriteXmlSchema(TextWriter, Boolean) | 使用指定的 TextWriter 將 DataTable 的當前數據結構編寫為 XML 架構。 若要保存該表及其所有子代的架構,請將 writeHierarchy參數設定為 true。 | |
WriteXmlSchema(XmlWriter, Boolean) | 使用指定的 XmlWriter 將 DataTable 的當前數據結構以 XML 架構形式寫入。 若要保存該表及其所有子代的架構,請將writeHierarchy 參數設定為 true。 |
名稱 | 說明 | |
---|---|---|
AsDataView | 創建並返回支持 LINQ 的 DataView 對象。 (由 DataTableExtensions 定義。) | |
AsEnumerable | 返回一個 IEnumerable<T> 對象,其泛型參數 T 為 DataRow。 此對象可用在 LINQ 表達式或方法查詢中。 (由 DataTableExtensions 定義。) |
名稱 | 說明 | |
---|---|---|
ColumnChanged | 在 DataRow 中指定的 DataColumn 的值被更改後發生。 | |
ColumnChanging | 在 DataRow 中指定的 DataColumn 的值發生更改時發生。 | |
Disposed | 添加事件處理程式以偵聽組件上的 Disposed 事件。 (繼承自 MarshalByValueComponent。) | |
Initialized | 初始化 DataTable 後發生。 | |
RowChanged | 在成功更改 DataRow 之後發生。 | |
RowChanging | 在 DataRow 正在更改時發生。 | |
RowDeleted | 在表中的行已被刪除後發生。 | |
RowDeleting | 在表中的行要被刪除之前發生。 | |
TableCleared | 清除 DataTable 後發生。 | |
TableClearing | 清除 DataTable 後發生。 | |
TableNewRow | 插入新 DataRow 時發生。 |
實例化添加列
使用技巧
(1)CreateaDataTable DataTabledt=newDataTable("Table_AX");(2)AddcolumnsforDataTable //Method1 dt.Columns.Add("column0",System.Type.GetType("System.String")); //Method2 DataColumndc=newDataColumn("column1",System.Type.GetType("System.Boolean")); dt.Columns.Add(dc); (3)AddrowsforDataTable //Initializetherow DataRowdr=dt.NewRow(); dr["column0"]="AX"; dr["column1"]=true; dt.Rows.Add(dr); //Doesn'tinitializetherow DataRowdr1=dt.NewRow(); dt.Rows.Add(dr1);(4)Selectrow //Searchthesecondrow如果沒有賦值,則用isnull來select DataRow[]drs=dt.Select("column1isnull"); DataRow[]drss=dt.Select("column0='AX'");(5)CopyDataTableincludedata DataTabledtNew=dt.Copy(); (6)CopyDataTableonlyscheme DataTabledtOnlyScheme=dt.Clone(); (7)Operateonerow //對dt的操作 //Method1 DataRowdrOperate=dt.Rows[0]; drOperate["column0"]="AXzhz"; drOperate["column1"]=false; //Method2 drOperate[0]="AXzhz"; drOperate[1]=false; //Method3 dt.Rows[0]["column0"]="AXzhz"; dt.Rows[0]["column1"]=false; //Method4 dt.Rows[0][0]="AXzhz"; dt.Rows[0][1]=false; (8)EvaluateanotherDataTable'srowtocurrentDatatable dtOnlyScheme.Rows.Add(dt.Rows[0].ItemArray); (9)Converttostring System.IO.StringWritersw=newSystem.IO.StringWriter(); System.Xml.XmlTextWriterxw=newSystem.Xml.XmlTextWriter(sw); dt.WriteXml(xw); strings=sw.ToString(); (10)FilterDataTable dt.DefaultView.RowFilter="column1<>true"; dt.DefaultView.RowFilter="column1=true"; (11)Sortrow dt.DefaultView.Sort="ID,NameASC"; dt=dt.DefaultView.ToTable(); (12)BindDataTable //綁定的其實是DefaultView gvTestDataTable.DataSource=dt; gvTestDataTable.DataBind(); (13)judgetheDataTable’sColumnnameisastring //判斷一個字元串是否為DataTable的列名 dtInfo.Columns.Contains("AX"); (14)DataTableconverttoXMLandXMLconverttoDataTable protectedvoidPage_Load(objectsender,EventArgse) { DataTabledt_AX=newDataTable(); //dt_AX.Columns.Add("Sex",typeof(System.Boolean)); //DataRowdr=dt_AX.NewRow(); //dr["Sex"]=true; //dt_AX.Rows.Add(dr); stringxml=ConvertBetweenDataTableAndXML_AX(dt_AX); DataTabledt=ConvertBetweenDataTableAndXML_AX(xml); } publicstringConvertBetweenDataTableAndXML_AX(DataTabledtNeedCoveret) { System.IO.TextWritertw=newSystem.IO.StringWriter(); //ifTableNameisempty,WriteXml()willthrowException.dtNeedCoveret.TableName=dtNeedCoveret.TableName.Length==0?"Table_AX":dtNeedCoveret.TableName; dtNeedCoveret.WriteXml(tw); dtNeedCoveret.WriteXmlSchema(tw); returntw.ToString(); } publicDataTableConvertBetweenDataTableAndXML_AX(stringxml) { System.IO.TextReadertrDataTable=newSystem.IO.StringReader(xml.Substring(0,xml.IndexOf("<?xml"))); System.IO.TextReadertrSchema=newSystem.IO.StringReader(xml.Substring(xml.IndexOf("<?xml"))); DataTabledtReturn=newDataTable(); dtReturn.ReadXmlSchema(trSchema); dtReturn.ReadXml(trDataTable); returndtReturn; }
數據複製
DataTable oldDT = GetDataTable();
DataTable newDT = oldDT.Clone();
把datatable中的所有信息複製到一個新的datatable,包括結構和數據:
DataTable oldDT = GetDataTable();
DataTable newDT = oldDT.Copy();
複製datatable中的某一行:我們可以使用.ImportRow()方法;
DataTable oldDT = GetDataTable();
DataTable newDT = new DataTable();
newDT.ImportRow(oldDT.Rows[1]);把原來datatable中的第二行數據複製到新的datatable中。