using System; using System.Data; using System.Xml; namespace WX.CRM.Common { public class DataTableHelper { private DataTable dataTable; public DataTable GetDataTable { get { return dataTable; } set { dataTable = value; } } public DataTableHelper() { dataTable = new DataTable(); } /// /// 给DataTable添加列 /// /// /// public void AddColumn(string name, Type type) { DataColumn column = new DataColumn(); column.ColumnName = name; column.DataType = type; dataTable.Columns.Add(column); } /// /// 给DataTable添加列(默认string类型) /// /// public void AddColumn(string name) { DataColumn column = new DataColumn(); column.ColumnName = name; column.DataType = typeof(System.String); dataTable.Columns.Add(column); } public void LoadData(XmlDocument doc) { XmlElement root = doc.DocumentElement; foreach (XmlNode row in root.ChildNodes) { DataRow dataRow = dataTable.NewRow(); foreach (XmlNode item in row.ChildNodes) { if (dataTable.Columns.Contains(item.Name)) { dataRow[item.Name] = item.InnerText.Trim(); } } dataTable.Rows.Add(dataRow); } } /// /// 两个DataTable合并(表结构不一样) /// /// 表1 /// 表2 /// public static DataTable TwoDataTableMerge(DataTable tab1, DataTable tab2) { //克隆DataTable1的结构 DataTable newDataTable = tab1.Copy(); //-------把没有tab2的字段加上去 foreach (DataColumn column in tab2.Columns) { if (!newDataTable.Columns.Contains(column.ColumnName)) { //column.Caption = model.EXCEL_COLNAME; DataColumn col = new DataColumn(column.ColumnName, column.DataType); //if (column.DataType == typeof(System.Decimal)) // col.DefaultValue = 0; col.Caption = column.Caption; newDataTable.Columns.Add(col); } } foreach (DataRow row in tab2.Rows) { DataRow newRow = newDataTable.NewRow(); foreach (DataColumn column in tab2.Columns) { newRow[column.ColumnName] = row[column.ColumnName]; } newDataTable.Rows.Add(newRow); } return newDataTable; } /// /// 两个DataTable合并(优化版,数据量多的作为基表) /// /// 表1 /// 表2 /// public static DataTable TwoDataTableMergeEfficiency(DataTable tab1, DataTable tab2) { if (tab2.Rows.Count > tab1.Rows.Count) return TwoDataTableMerge(tab2, tab1); else return TwoDataTableMerge(tab1, tab2); } } }