109 lines
3.6 KiB
C#
109 lines
3.6 KiB
C#
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();
|
||
}
|
||
/// <summary>
|
||
/// 给DataTable添加列
|
||
/// </summary>
|
||
/// <param name="name"></param>
|
||
/// <param name="type"></param>
|
||
public void AddColumn(string name, Type type)
|
||
{
|
||
DataColumn column = new DataColumn();
|
||
column.ColumnName = name;
|
||
column.DataType = type;
|
||
dataTable.Columns.Add(column);
|
||
}
|
||
/// <summary>
|
||
/// 给DataTable添加列(默认string类型)
|
||
/// </summary>
|
||
/// <param name="name"></param>
|
||
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);
|
||
}
|
||
}
|
||
/// <summary>
|
||
/// 两个DataTable合并(表结构不一样)
|
||
/// </summary>
|
||
/// <param name="tab1">表1</param>
|
||
/// <param name="tab2">表2</param>
|
||
/// <returns></returns>
|
||
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;
|
||
}
|
||
/// <summary>
|
||
/// 两个DataTable合并(优化版,数据量多的作为基表)
|
||
/// </summary>
|
||
/// <param name="tab1">表1</param>
|
||
/// <param name="tab2">表2</param>
|
||
/// <returns></returns>
|
||
public static DataTable TwoDataTableMergeEfficiency(DataTable tab1, DataTable tab2)
|
||
{
|
||
if (tab2.Rows.Count > tab1.Rows.Count)
|
||
return TwoDataTableMerge(tab2, tab1);
|
||
else
|
||
return TwoDataTableMerge(tab1, tab2);
|
||
}
|
||
}
|
||
}
|