예제 #1
0
 /// <summary>
 /// 导入时:把中文列头翻译成英文列头(同时处理列头结构)。
 /// 并返回字典:key:列头,value:格式化名
 /// </summary>
 public static Dictionary <string, string> FormatterTitle(MDataTable dt, MDataRow info, string objName)
 {
     if (info == null)
     {
         return(GridConfig.SetHeaderField(dt, objName));
     }
     else
     {
         Dictionary <string, string> formatDic = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);
         MDataTable infoConfig = GetExcelInfo(info.Get <string>(0));
         if (infoConfig != null)
         {
             //附加自定义列。
             foreach (var configRow in infoConfig.Rows)
             {
                 string formatter = configRow.Get <string>(Config_ExcelInfo.Formatter);
                 if (!string.IsNullOrEmpty(formatter) && formatter[0] != '#')//增加默认值的列。
                 {
                     string excelName = configRow.Get <string>(Config_ExcelInfo.ExcelName);
                     if (!dt.Columns.Contains(excelName))
                     {
                         MCellStruct ms = new MCellStruct(excelName, System.Data.SqlDbType.NVarChar);
                         ms.TableName = configRow.Get <string>(Config_ExcelInfo.TableName);
                         dt.Columns.Insert(dt.Columns.Count - 1, ms);
                     }
                 }
             }
             MDataRow infoRow;
             foreach (MCellStruct item in dt.Columns)
             {
                 infoRow = infoConfig.FindRow(Config_ExcelInfo.ExcelName + "='" + item.ColumnName + "'");
                 if (infoRow == null && item.ColumnName.IndexOf('_') > 0) // 兼容只找一级的映射列。
                 {
                     string columnName = item.ColumnName.Split('_')[0];
                     infoRow = infoConfig.FindRow(Config_ExcelInfo.ExcelName + "='" + columnName + "'");
                 }
                 if (infoRow != null)
                 {
                     string field = infoRow.Get <string>(Config_ExcelInfo.Field);
                     if (string.IsNullOrEmpty(field))
                     {
                         continue;
                     }
                     item.Description = item.ColumnName;//把中文列名放到描述里。
                     item.TableName   = infoRow.Get <string>(Config_ExcelInfo.TableName);
                     if (string.Compare(item.ColumnName, field, StringComparison.OrdinalIgnoreCase) != 0)
                     {
                         int index = dt.Columns.GetIndex(field);
                         if (index < 0)
                         {
                             item.ColumnName = field;//
                         }
                         else // 字段同名
                         {
                             item.ColumnName = item.TableName + "." + field;
                             //修改上一个,也增加表名。
                             dt.Columns[index].ColumnName = dt.Columns[index].TableName + "." + dt.Columns[index].ColumnName;
                         }
                     }
                     string formatter = infoRow.Get <string>(Config_ExcelInfo.Formatter);
                     if (!string.IsNullOrEmpty(formatter)) // 需要格式化的项
                     {
                         if (formatter.Length > 2 && formatter[0] == '#')
                         {
                             //item.SqlType = System.Data.SqlDbType.NVarChar;//重置数据类型(int数据将格式成文本)
                             formatDic.Add(item.ColumnName, formatter.Substring(1).Split(new string[] { "=>" }, StringSplitOptions.None)[0]);
                         }
                         else
                         {
                             item.DefaultValue = SqlCode.FormatPara(formatter);//如果不是#开头的,设置为默认值(同时处理@参数)。
                         }
                     }
                 }
             }
         }
         return(formatDic);
     }
 }