/// <summary> /// 处理汇总的列的信息 /// 包括了从ColumnPropertyInfo填充一些信息,处理一些误加入空格的情况 /// </summary> /// <param name="colPropertys"></param> /// <param name="summaryCols"></param> private void handleSummaryCols(Dictionary <string, ColumnPropertyInfo> colPropertys, Dictionary <string, ColumnSummaryInfo> summaryCols) { string logHeader = "[FillSummaryCols]"; foreach (ColumnSummaryInfo sumCol in summaryCols.Values) { ColumnPropertyInfo colProperty = colPropertys[sumCol.ColumnName]; if (colProperty == null) { MB.Util.TraceEx.Write("{0}-列{1}未在ColumnPropertyInfo中配置", logHeader, sumCol.Name); continue; } //如果是汇总列,并且没有汇总函数,则继承colProperty的设置 if (sumCol.IsSummaryItem && sumCol.SummaryItemType == SummaryItemType.None) { if (colProperty.SummaryItemType == SummaryItemType.None) { MB.Util.TraceEx.Write("{0}-列{1}配置的SummaryItemType不能为None。可以配置为Average,Count,Max,Min,Sum", logHeader, sumCol.Name); continue; } else { sumCol.SummaryItemType = colProperty.SummaryItemType; } } } }
public ColumnPropertyInfo[] ResolveKeyProperties(Type type) { var a = new ColumnPropertyInfo[1]; a[0] = new ColumnPropertyInfo(type.GetProperties().Single(p => p.Name == "Id")); return(a); }
private static string GenerateColumnClause(string tableName, ColumnPropertyInfo column) { if (column.IsCustomColumnName) { return($"{tableName}.{column.ColumnName} AS {column.Name}"); } else { return($"{tableName}.{column.ColumnName}"); } }
/// <summary> /// 动态聚组结果显示列的配置 /// 1.先读取UI配置 /// 2.再读取动态聚组的配置 /// 3.合并配置,合并的优先级是动态聚组的配置优先, 动态聚组的配置的属性值优先 /// </summary> /// <returns></returns> public Dictionary <string, ColumnPropertyInfo> GetResultColPropertys() { string xmlFileName = _XMLFile; Dictionary <string, ColumnPropertyInfo> uiColSettings = _UIColsSetting; string xmlFileFullName = ShareLib.Instance.BuildXmlConfigFileFullName(xmlFileName); MB.Util.TraceEx.Write(string.Format("开始从 XML 文件 {0} 中获取列的信息", xmlFileName)); var dyResultCols = MB.Util.XmlConfig.XmlConfigHelper.Instance.CreateEntityList <ColumnPropertyInfo>("Name", xmlFileFullName, DYNAMIC_ENTITY_INFO); #region 构造属性访问器 Type typeObject = typeof(ColumnPropertyInfo); PropertyInfo[] infos = typeObject.GetProperties(); Dictionary <string, MB.Util.Emit.DynamicPropertyAccessor> dAccs = new Dictionary <string, MB.Util.Emit.DynamicPropertyAccessor>(); foreach (PropertyInfo info in infos) { object[] atts = info.GetCustomAttributes(typeof(XmlAttribute), true); if (atts == null) { continue; } dAccs.Add(info.Name, new MB.Util.Emit.DynamicPropertyAccessor(typeObject, info)); } #endregion int orderIndex = 0; foreach (ColumnPropertyInfo dyInfo in dyResultCols.Values) { if (uiColSettings.ContainsKey(dyInfo.Name)) { ColumnPropertyInfo uiInfo = uiColSettings[dyInfo.Name]; foreach (MB.Util.Emit.DynamicPropertyAccessor propAccess in dAccs.Values) { object uiProValue = propAccess.Get(uiInfo); object dyProValue = propAccess.Get(dyInfo); if (dyProValue == null && uiProValue != null) { propAccess.Set(dyInfo, uiProValue); } } if (dyInfo.OrderIndex <= 0) { dyInfo.OrderIndex = orderIndex++; } } } return(dyResultCols); }
//检查edit column中的值,是否与LookUp类似的控件中的data source中的,TextField或者ValueField相互匹配 private bool validateColValueInLookUpSource(ColumnPropertyInfo colPropertyInfo, ColumnEditCfgInfo colEditProInfo, object value, ref string errMsg) { if (colEditProInfo == null || colEditProInfo.DataSource == null) { return(true); } if (!colEditProInfo.IsValidateInputFromDataSource) { return(true); } DataTable dtData = MB.Util.MyConvert.Instance.ToDataTable(colEditProInfo.DataSource, string.Empty); //如果返回的数据源不是data table则直接返回不做验证 if (dtData == null || dtData.Rows.Count <= 0) { return(true); } EditControlType controlType = (EditControlType)Enum.Parse(typeof(EditControlType), colEditProInfo.EditControlType); if (controlType == EditControlType.ComboCheckedListBox || controlType == EditControlType.LookUpEdit) { if (value == null) { errMsg = string.Format("XML 文件中列 {0} 的值不能为空,请检查导入的值", colPropertyInfo.Description); } DataTable newData = dtData.Copy(); foreach (DataRow dr in newData.Rows) { bool isEqualToTextField = dr[colEditProInfo.TextFieldName] == null || (value.ToString() == dr[colEditProInfo.TextFieldName].ToString()); bool isEqualToValueField = dr[colEditProInfo.ValueFieldName] == null || (value.ToString() == dr[colEditProInfo.ValueFieldName].ToString()); if (isEqualToTextField || isEqualToValueField) { return(true); } } errMsg = string.Format("XML 文件中列 {0} 的值不能与下拉框中的数据源相匹配,请修改当前导入的值 {1}", colPropertyInfo.Description, value); return(false); } return(true); }
/// <summary> /// 获取动态聚组,分组列或者汇总列的设置的配置信息 /// </summary> /// <param name="isMainEntity">主对象则是True,从对象则是False</param> /// <returns>对象的列配置信息集合</returns> public Dictionary <string, DynamicGroupColumnPropertyInfo> GetColProInfos(bool isMainEntity) { string xmlFileName = _XMLFile; string entityNode = string.Empty; if (isMainEntity) { entityNode = MAIN_COLUMN_NODE; } else { entityNode = DETAIL_COLUMN_NODE; } string xmlFileFullName = ShareLib.Instance.BuildXmlConfigFileFullName(xmlFileName); var cols = MB.Util.XmlConfig.XmlConfigHelper.Instance.CreateEntityList <DynamicGroupColumnPropertyInfo>("Name", xmlFileFullName, entityNode); if (cols != null) { Dictionary <string, ColumnPropertyInfo> uiColSettings = _UIColsSetting; foreach (DynamicGroupColumnPropertyInfo dgCol in cols.Values) { if (uiColSettings.ContainsKey(dgCol.Name)) { ColumnPropertyInfo uiInfo = uiColSettings[dgCol.Name]; if (string.IsNullOrEmpty(dgCol.Description)) { dgCol.Description = uiInfo.Description; } if (string.IsNullOrEmpty(dgCol.DataType)) { dgCol.DataType = uiInfo.DataType; } } if (dgCol.ColArea == DynamicGroupColArea.None) { dgCol.ColArea = DynamicGroupColArea.Group; } } } return(cols); }
private bool ArePropertiesEqual(ColumnPropertyInfo columnPropertyInfo, string name, string description, int order) { return(string.Equals(columnPropertyInfo.PropertyName, name, System.StringComparison.OrdinalIgnoreCase) && string.Equals(columnPropertyInfo.DisplayName, description, System.StringComparison.OrdinalIgnoreCase) && columnPropertyInfo.DisplayOrder == order); }
//转换获取到的数据源。 private DataSet convertToDataSet(Dictionary <string, ColumnPropertyInfo> columnPropertys, ColumnEditCfgInfo cfgInfo, IList lstDatas) { DataSet dsData = new DataSet(); DataTable dt = new DataTable(); ColumnPropertyInfo columnInfo = null; if (columnPropertys != null && columnPropertys.ContainsKey(cfgInfo.Name)) { columnInfo = columnPropertys[cfgInfo.Name]; } if (columnInfo != null && !string.IsNullOrEmpty(columnInfo.DataType)) { dt.Columns.Add(cfgInfo.ValueFieldName, MB.Util.General.CreateSystemType(columnInfo.DataType, false)); } else { dt.Columns.Add(cfgInfo.ValueFieldName); } if (!dt.Columns.Contains(cfgInfo.TextFieldName)) //添加列判断,兼容Value和Text字段值相同的情况 modify by aifang 2012-10-16 { dt.Columns.Add(cfgInfo.TextFieldName); } if (lstDatas != null && lstDatas.Count > 0) { object entity = lstDatas[0]; if (entity.GetType().Equals(typeof(KeyValuePair <string, string>))) { foreach (KeyValuePair <string, string> valInfo in lstDatas) { dt.Rows.Add(valInfo.Key, valInfo.Value); } } else { Type entityType = entity.GetType(); if (!MB.Util.MyReflection.Instance.CheckObjectExistsProperty(entity, cfgInfo.ValueFieldName)) { throw new MB.Util.APPException(string.Format("请检查XML 配置文件 EDITUI 列 {0} 的下拉列表框返回值中是否包含 属性{1} ,请配置正确的ValueFieldName", cfgInfo.Name, cfgInfo.ValueFieldName), MB.Util.APPMessageType.SysErrInfo); } if (!MB.Util.MyReflection.Instance.CheckObjectExistsProperty(entity, cfgInfo.TextFieldName)) { throw new MB.Util.APPException(string.Format("请检查XML 配置文件 EDITUI 列 {0} 的下拉列表框返回值中是否包含 属性{1},请配置正确的TextFieldName", cfgInfo.Name, cfgInfo.TextFieldName), MB.Util.APPMessageType.SysErrInfo); } return(MB.Util.MyConvert.Instance.ConvertEntityToDataSet(entityType, lstDatas, null)); //foreach (object obj in lstDatas) { // object val = MB.Util.MyReflection.Instance.InvokePropertyForGet(obj, cfgInfo.ValueFieldName); // if (columnInfo != null && !string.IsNullOrEmpty(columnInfo.DataType)) { // val = MB.Util.MyReflection.Instance.ConvertValueType(MB.Util.General.CreateSystemType(columnInfo.DataType, false), val); // } // object txt = MB.Util.MyReflection.Instance.InvokePropertyForGet(obj, cfgInfo.TextFieldName); // dt.Rows.Add(val, txt); //} } } dsData.Tables.Add(dt); return(dsData); }