#region
|
|
using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using CSFrameworkV5.Library.CommonClass;
|
using DevExpress.XtraEditors;
|
|
#endregion
|
|
namespace CSFrameworkV5.Library
|
{
|
public partial class frmImporterFieldMapping : XtraForm
|
{
|
private List<FieldMapping> _oldMapping;
|
private List<FieldMapping> _original;
|
|
private frmImporterFieldMapping()
|
{
|
InitializeComponent();
|
}
|
|
private void btnApply_Click(object sender, EventArgs e)
|
{
|
Close();
|
}
|
|
private void btnCancel_Click(object sender, EventArgs e)
|
{
|
//还原数据
|
if (_original != null && _original.Count > 0)
|
{
|
_oldMapping.Clear();
|
foreach (var mp in _original) _oldMapping.Add(mp);
|
}
|
|
Close();
|
}
|
|
private List<FieldMapping> CopyMapping(List<FieldMapping> source)
|
{
|
var list = new List<FieldMapping>();
|
foreach (var fm in source)
|
list.Add(new FieldMapping(fm.SourceField, fm.TargetField));
|
|
return list;
|
}
|
|
/// <summary>
|
/// 打开配置向导
|
/// </summary>
|
/// <param name="sourceTable">数据源</param>
|
/// <param name="target">目地的</param>
|
/// <param name="oldMapping">已配置的字段映射</param>
|
/// <returns></returns>
|
public static List<FieldMapping> Execute(DataTable sourceTable,
|
IImporterTarget target, List<FieldMapping> oldMapping)
|
{
|
var form = new frmImporterFieldMapping();
|
form.Init(sourceTable, target, oldMapping);
|
form.ShowDialog();
|
return form.GetFieldMapping();
|
}
|
|
private List<FieldMapping> GetFieldMapping()
|
{
|
return gcFields.DataSource as List<FieldMapping>;
|
}
|
|
private void Init(DataTable sourceTable, IImporterTarget target,
|
List<FieldMapping> oldMapping)
|
{
|
var fieldListSource = new List<FieldEntity>(); //来源表字段清单
|
var fieldListTarget = target.GetFieldList(); //目标表字段清单
|
var fieldMapping = oldMapping;
|
|
if (oldMapping == null) //建立新的字段映射关系
|
{
|
fieldMapping = new List<FieldMapping>();
|
}
|
else
|
{
|
_oldMapping = oldMapping;
|
_original = CopyMapping(oldMapping); //备份
|
|
var invalide = new List<FieldMapping>();
|
//检查映射关系的字段名是否存在
|
foreach (var fm in oldMapping)
|
//来源表字段名不存在
|
if (fm.SourceField != "" &&
|
sourceTable.Columns[fm.SourceField] == null)
|
invalide
|
.Add(fm); // fm.SourceField = "";//清除字段名
|
|
foreach (var fm in invalide) oldMapping.Remove(fm); //删除无效的映射关系
|
}
|
|
//枚举来源表的字段清单
|
foreach (DataColumn col in sourceTable.Columns)
|
{
|
fieldListSource.Add(new FieldEntity(col.ColumnName.Trim(),
|
col.ColumnName.Trim()));
|
|
if (oldMapping == null) //自动匹配两张表的字段名是否一致,如果相同自动建立映射关系
|
fieldMapping.Add(new FieldMapping(col.ColumnName.Trim(),
|
target.MatchField(col.ColumnName.Trim())));
|
|
if (!IsExistsSourceField(fieldMapping, col.ColumnName.Trim()))
|
fieldMapping.Add(new FieldMapping(col.ColumnName.Trim(),
|
target.MatchField(col.ColumnName.Trim())));
|
}
|
|
//来源表的Lookup
|
lookSource.DataSource = fieldListSource;
|
lookSource.DisplayMember = "FieldName";
|
lookSource.ValueMember = "FieldName";
|
|
//目标表的Lookup
|
lookTarget.DataSource = fieldListTarget;
|
lookTarget.DisplayMember = "TitleName";
|
lookTarget.ValueMember = "FieldName";
|
|
//绑定表格数据源
|
gcFields.DataSource = fieldMapping;
|
}
|
|
private bool IsExistsSourceField(List<FieldMapping> mapping,
|
string field)
|
{
|
foreach (var fm in mapping)
|
if (fm.SourceField == field.Trim())
|
return true;
|
|
return false;
|
}
|
}
|
}
|