#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 _oldMapping; private List _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 CopyMapping(List source) { var list = new List(); foreach (var fm in source) list.Add(new FieldMapping(fm.SourceField, fm.TargetField)); return list; } /// /// 打开配置向导 /// /// 数据源 /// 目地的 /// 已配置的字段映射 /// public static List Execute(DataTable sourceTable, IImporterTarget target, List oldMapping) { var form = new frmImporterFieldMapping(); form.Init(sourceTable, target, oldMapping); form.ShowDialog(); return form.GetFieldMapping(); } private List GetFieldMapping() { return gcFields.DataSource as List; } private void Init(DataTable sourceTable, IImporterTarget target, List oldMapping) { var fieldListSource = new List(); //来源表字段清单 var fieldListTarget = target.GetFieldList(); //目标表字段清单 var fieldMapping = oldMapping; if (oldMapping == null) //建立新的字段映射关系 { fieldMapping = new List(); } else { _oldMapping = oldMapping; _original = CopyMapping(oldMapping); //备份 var invalide = new List(); //检查映射关系的字段名是否存在 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 mapping, string field) { foreach (var fm in mapping) if (fm.SourceField == field.Trim()) return true; return false; } } }