コード例 #1
0
        /// <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;
                    }
                }
            }
        }
コード例 #2
0
        public ColumnPropertyInfo[] ResolveKeyProperties(Type type)
        {
            var a = new ColumnPropertyInfo[1];

            a[0] = new ColumnPropertyInfo(type.GetProperties().Single(p => p.Name == "Id"));
            return(a);
        }
コード例 #3
0
 private static string GenerateColumnClause(string tableName, ColumnPropertyInfo column)
 {
     if (column.IsCustomColumnName)
     {
         return($"{tableName}.{column.ColumnName} AS {column.Name}");
     }
     else
     {
         return($"{tableName}.{column.ColumnName}");
     }
 }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
        //检查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);
        }
コード例 #6
0
        /// <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);
 }
コード例 #8
0
        //转换获取到的数据源。
        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);
        }