c# datatable用法总结 |
本文标签:c#,datatable 一、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 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); //Doesnt 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 DataTables 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 DataTables 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; } |