***************************************************
更多精彩,歡迎進入:http://shop115376623.taobao.com
***************************************************
DataTable 是一個臨時保存數據的網格虛擬表(表示內存中數據的一個表。)。DataTable是ADO dot net 庫中的核心對象。它可以被應用在 VB 和 ASP 上。它無須代碼就可以簡單的綁定數據庫。它具有微軟風格的用戶界面。
其他使用DataTable的對象包括DataSet和DataView。
注意當訪問DataTable對象時,請注意它們是按條件區分大小寫的。例如,如果一個DataTable被命名為“mydatatable”,另一個被命名為“Mydatatable”,則用于搜索其中一個表的字符串被認為是區分大小寫的。但是,如果“mydatatable”存在而“Mydatatable”不存在,則認為該搜索字符串不區分大小寫。一個DataSet可以包含數個DataTable對象,它們具有相同的TableName屬性值和不同的Namespace屬性值。有關使用DataTable對象的更多信息。
在項目中經常用到DataTable,如果DataTable使用得當,不僅能使程序簡潔實用,而且能夠提高性能,達到事半功倍的效果,現對DataTable的使用技巧進行一下總結。?
????????一、DataTable簡介????
??????????(1)構造函數?
??????????DataTable()???不帶參數初始化DataTable?類的新實例。?
??????????DataTable(string tableName)??用指定的表名初始化DataTable?類的新實例。?
??????????DataTable(string tableName, string tableNamespace)?用指定的表名和命名空間初始化DataTable類的新實例。?
??????????(2)?常用屬性?
??????????CaseSensitive????指示表中的字符串比較是否區分大小寫。?
??????????ChildRelations???獲取此DataTable?的子關系的集合。?
??????????Columns?????????????獲取屬于該表的列的集合。?
??????????Constraints????????獲取由該表維護的約束的集合。?
??????????DataSet???????????????獲取此表所屬的DataSet。?
??????????DefaultView???????獲取可能包括篩選視圖或游標位置的表的自定義視圖。?
??????????HasErrors??????????獲取一個值,該值指示該表所屬的DataSet?的任何表的任何行中是否有錯誤。?
??????????MinimumCapacity??獲取或設置該表最初的起始大小。該表中行的最初起始大小。默認值為?50。?
??????????Rows??????????????????獲取屬于該表的行的集合。?
??????????TableName???????獲取或設置DataTable?的名稱。?
??????????(3)常用方法?
??????????AcceptChanges()???提交自上次調用AcceptChanges()?以來對該表進行的所有更改。?
??????????BeginInit()?????????開始初始化在窗體上使用或由另一個組件使用的DataTable。初始化發生在運行時。
??????????Clear()???????????????清除所有數據的DataTable。?
??????????Clone()??????????????克隆DataTable?的結構,包括所有DataTable?架構和約束。?
??????????EndInit()????????????結束在窗體上使用或由另一個組件使用的DataTable?的初始化。初始化發生在運行時。?
??????????ImportRow(DataRow row)????將DataRow?復制到DataTable?中,保留任何屬性設置以及初始值和當前值。?
??????????Merge(DataTable table)??將指定的DataTable?與當前的DataTable?合并。?
??????????NewRow()?????????創建與該表具有相同架構的新DataRow。
?
????????二、DataTable使用技巧
??????(1)Create a DataTable
???????? DataTable dt = new DataTable("Table_AX");?
??????(2)Add columns for DataTable
??????? //Method 1
??????? dt.Columns.Add("column0", System.Type.GetType("System.String"));
??????? //Method 2
??????? DataColumn dc = new DataColumn("column1", System.Type.GetType("System.Boolean"));
??????? dt.Columns.Add(dc);?
???????(3)Add rows for DataTable
???????? //Initialize the row
???????? DataRow dr = dt.NewRow();
???????? dr["column0"] = "AX";
???????? dr["column1"] = true;
???????? dt.Rows.Add(dr);
???????? //Doesn't initialize the row
???????? DataRow dr1 = dt.NewRow();
???????? dt.Rows.Add(dr1);??
????????(4)Select row
???????? //Search the second row?如果沒有賦值,則用is null來select
???????? DataRow[] drs = dt.Select("column1 is null");
???????? DataRow[] drss = dt.Select("column0 = 'AX'");?
????????(5)Copy DataTable include data
???????? DataTable dtNew = dt.Copy();?
????????(6)Copy DataTable only scheme
???????? DataTable dtOnlyScheme = dt.Clone();?
????????(7)Operate one row
???????? //對dt的操作
???????? //Method 1
???????? DataRow drOperate = dt.Rows[0];
???????? drOperate["column0"] = "AXzhz";
???????? drOperate["column1"] = false;
???????? //Method 2
???????? drOperate[0] = "AXzhz";
???????? drOperate[1] = false;
???????? //Method 3
???????? dt.Rows[0]["column0"] = "AXzhz";
???????? dt.Rows[0]["column1"] = false;
???????? //Method 4
???????? dt.Rows[0][0] = "AXzhz";
???????? dt.Rows[0][1] = false;?
???????(8)Evaluate another DataTable's row to current Datatable
???????? dtOnlyScheme.Rows.Add(dt.Rows[0].ItemArray);?
???????(9)Convert to string
???????? System.IO.StringWriter sw = new System.IO.StringWriter();
???????? System.Xml.XmlTextWriter xw = new System.Xml.XmlTextWriter(sw);
???????? dt.WriteXml(xw);
???????? string s = sw.ToString();
????????(10)Filter DataTable
???????? dt.DefaultView.RowFilter = "column1 <> true";
???????? dt.DefaultView.RowFilter = "column1 = true";
????????(11)Sort row
????????? dt.DefaultView.Sort = "ID ,Name ASC";
????????? dt=dt.DefaultView.ToTable();
?????????(12)Bind DataTable
?????????? //綁定的其實是DefaultView
????????? gvTestDataTable.DataSource = dt;
????????? gvTestDataTable.DataBind();
?????????(13)judge the DataTable’s Column name is a string
????????? //判斷一個字符串是否為DataTable的列名
???????? dtInfo.Columns.Contains("AX");
?????????(14)DataTable convert to XML and XML convert to DataTable
????????? protected void Page_Load(object sender, EventArgs e)
????????? {
???????????? DataTable dt_AX = new DataTable();
???????????? //dt_AX.Columns.Add("Sex", typeof(System.Boolean));
???????????? //DataRow dr = dt_AX.NewRow();
???????????? //dr["Sex"] = true;
???????????? //dt_AX.Rows.Add(dr);
???????????? string xml=ConvertBetweenDataTableAndXML_AX(dt_AX);
???????????? DataTable dt = ConvertBetweenDataTableAndXML_AX(xml);
???????? }
???????? public string ConvertBetweenDataTableAndXML_AX(DataTable dtNeedCoveret)
??????? {
???????????? System.IO.TextWriter tw = new System.IO.StringWriter();
???????????? //if TableName is empty, WriteXml() will throw Exception.?????????????????
dtNeedCoveret.TableName=dtNeedCoveret.TableName.Length==0?"Table_AX":dtNeedCoveret.TableName;
???????????? dtNeedCoveret.WriteXml(tw);
???????????? dtNeedCoveret.WriteXmlSchema(tw);
???????????? return tw.ToString();
??????? }
???????? public DataTable ConvertBetweenDataTableAndXML_AX(string xml)
??????? {
???????????? System.IO.TextReader trDataTable = new System.IO.StringReader(xml.Substring(0, xml.IndexOf("<?xml")));
???????????? System.IO.TextReader trSchema = new System.IO.StringReader(xml.Substring(xml.IndexOf("<?xml")));
???????????? DataTable dtReturn = new DataTable();
???????????? dtReturn.ReadXmlSchema(trSchema);
???????????? dtReturn.ReadXml(trDataTable);
???????????? return dtReturn;
??????? }