/// <summary>
/// 处理DataTable的方法(通过此方法模仿左连接效果)
/// </summary>
/// <param name="TargetTable"></param>
/// <param name="JoinTable"></param>
/// <param name="JoinColumnName">作为连接的列名</param>
/// <param name="AddColumnsFromJT">要纳入目标 DataTable的列名</param>
private static void DataTableJoin( DataTable TargetTable, DataTable JoinTable, string JoinColumnName, params string[] AddColumnsFromJT)
{
if (!TargetTable.Columns.Contains(JoinColumnName))
{
throw new Exception("目标DataTable中无" + JoinColumnName + "列!");
}
if (!JoinTable.Columns.Contains(JoinColumnName))
{
throw new Exception("连接DataTable中无" + JoinColumnName + "列!");
}
try
{
bool Exist = false;//标志是否存在与当前行的zone/org对应的数字,不存在则赋0
int ColumnIndex = TargetTable.Columns.Count;//列的序号
foreach (string Column in AddColumnsFromJT)
{
// 如果列名不与已有列重复,则用此列名,否则,用列的序号
if (!TargetTable.Columns.Contains(Column))
{
TargetTable.Columns.Add(Column);
}
else
{
TargetTable.Columns.Add(ColumnIndex.ToString());
}
for (int i = 0; i < TargetTable.Rows.Count; i++)
{
Exist = false;
foreach (DataRow JoinRow in JoinTable.Rows)
{
if (JoinRow[JoinColumnName].ToString() == TargetTable.Rows[i][JoinColumnName].ToString())
{
TargetTable.Rows[i][ColumnIndex] = JoinRow[Column];
Exist = true;
}
}
if (!Exist)
{
TargetTable.Rows[i][ColumnIndex] = DBNull.Value;
}
}
ColumnIndex++;
}
}
catch (Exception e)
{
throw new Exception("执行DataTableJoin失败。/n" + e.Message);
}
}