ibeautiful
一、DataTable简介(1)构造函数DataTable() 不带参数初始化DataTable 类的新实例。DataTable(string tableName) 用指定的表名初始化DataTable 类的新实例。DataTable(string tableName, string tableNamespace) 用指定的表名和命名空间初始化DataTable 类的新实例。(2) 常用属性CaseSensitive 指示表中的字符串比较是否区分大小写。ChildRelations 获取此DataTable 的子关系的集合。Columns 获取属于该表的列的集合。Constraints 获取由该表维护的约束的集合。DataSet 获取此表所属的DataSet。DataSet相关信息,可见我以前的一篇文章《数据访问(2)-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 DataTableDataTable dt = new DataTable("Table_AX");(2)Add columns for DataTable//Method 1dt.Columns.Add("column0", System.Type.GetType("System.String"));//Method 2DataColumn dc = new DataColumn("column1", System.Type.GetType("System.Boolean"));dt.Columns.Add(dc);(3)Add rows for DataTable//Initialize the rowDataRow dr = dt.NewRow();dr["column0"] = "AX";dr["column1"] = true;dt.Rows.Add(dr);//Doesn't initialize the rowDataRow dr1 = dt.NewRow();dt.Rows.Add(dr1);(4)Select row//Search the second row 如果没有赋值,则用is null来selectDataRow[] drs = dt.Select("column1 is null");DataRow[] drss = dt.Select("column0 = 'AX'");(5)Copy DataTable include dataDataTable dtNew = dt.Copy();(6)Copy DataTable only schemeDataTable dtOnlyScheme = dt.Clone();(7)Operate one row//对dt的操作//Method 1DataRow drOperate = dt.Rows[0];drOperate["column0"] = "AXzhz";drOperate["column1"] = false;//Method 2drOperate[0] = "AXzhz";drOperate[1] = false;//Method 3dt.Rows[0]["column0"] = "AXzhz";dt.Rows[0]["column1"] = false;//Method 4dt.Rows[0][0] = "AXzhz";dt.Rows[0][1] = false;(8)Evaluate another DataTable's row to current DatatabledtOnlyScheme.Rows.Add(dt.Rows[0].ItemArray);(9)Convert to stringSystem.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 DataTabledt.DefaultView.RowFilter = "column1 <> true";dt.DefaultView.RowFilter = "column1 = true";(11)Sort rowdt.DefaultView.Sort = "ID ,Name ASC";dt=dt.DefaultView.ToTable();(12)Bind DataTable//绑定的其实是DefaultViewgvTestDataTable.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 DataTableprotected 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;}