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);
}
}
}