Commit 62593bb0 authored by tr's avatar tr

1、DataTable两表复制优化

2、增加DataRow行复制
parent 4689bf85
......@@ -65,23 +65,38 @@ namespace FunnyPick
/// <summary>
/// 复制相同列
/// 复制两表(针对同结构,不同结构只复制相同列)
/// </summary>
/// <param name="dtFrom">源表</param>
/// <param name="dtTarget">目标表</param>
/// <param name="distinctCol">去重列</param>
/// <param name="ExceptColList">去除列(即包含在此列表中的列不复制)</param>
public void CopySameCol(DataTable dtFrom, DataTable dtTarget, string distinctCol, List<string> ExceptColList = null)
/// <param name="AlwaysList">总是覆盖列(即包含在此列表中的列总是复制)</param>
/// <param name="ExceptList">去除列(即包含在此列表中的列不复制)</param>
public void CopyTable(DataTable dtFrom, DataTable dtTarget, string distinctCol = "", List<string> AlwaysList = null, List<string> ExceptList = null)
{
if (dtFrom == null || dtTarget == null)
return;
//
foreach (DataRow r in dtFrom.Rows)
{
if (IsIllegalDataRow(r))
continue;
//如果去重列不为空,并且两表都包含该列,则取出重复值
//如果去重列不为空,并且两表都包含该列,则去除重复值
if (!string.IsNullOrEmpty(distinctCol) && dtFrom.Columns.Contains(distinctCol) && dtTarget.Columns.Contains(distinctCol))
{
if (dtTarget.Select($"{distinctCol}='{r[distinctCol]}'").Length > 0)
DataRow[] rows = dtTarget.Select($"{distinctCol}='{r[distinctCol]}'");
if (rows.Length > 0 && AlwaysList != null)
{
foreach (var s in AlwaysList)
{
if (!dtFrom.Columns.Contains(s) || !dtTarget.Columns.Contains(s))
continue;
rows[0][s] = r[s];
}
rows[0].EndEdit();
continue;
}
}
//创建目标新行
DataRow drNew = dtTarget.NewRow();
......@@ -89,7 +104,7 @@ namespace FunnyPick
{
string ColName = c.ColumnName;
//ID和指定忽略的列,不复制
if (ColName.Equals("ID") || ExceptColList?.IndexOf(ColName) >= 0)
if (ColName.Equals("ID") || ExceptList?.IndexOf(ColName) >= 0)
continue;
if (dtTarget.Columns.Contains(ColName))
{
......@@ -100,6 +115,32 @@ namespace FunnyPick
dtTarget.Rows.Add(drNew);
}
}
/// <summary>
/// 复制两行(针对相同结构,不同结构只复制相同列)
/// </summary>
/// <param name="drFrom">源行</param>
/// <param name="drTarget">目标行</param>
/// <param name="ExceptList">去除列(即其中包含的列不复制到目标行)</param>
public static void CopyRow(DataRow drFrom, DataRow drTarget, List<string> ExceptList = null)
{
if (drFrom == null || drTarget == null)
return;
//
foreach (DataColumn c in drFrom.Table.Columns)
{
string ColName = c.ColumnName;
//ID和指定列不复制
if (ColName.Equals("ID") || ExceptList?.IndexOf(ColName) >= 0)
continue;
if (drTarget.Table.Columns.Contains(ColName))
{
drTarget[ColName] = drFrom[ColName];
}
drTarget.EndEdit();
}
}
/// <summary>
/// 是否无效行
/// </summary>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment