啊鑫
2024-07-11 afbf8700d137710713db61955879d0f5acb73738
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#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;
        }
    }
}