Esempio n. 1
0
        private T SetEntityRowToModel <T>(IRowItem rowItem) where T : class
        {
            Type type              = typeof(T); //获取类型
            var  result            = type.Assembly.CreateInstance(type.FullName) as T;
            var  propertyInfoArray = type.GetProperties();

            //遍历所有属性
            foreach (var p in propertyInfoArray)
            {
                var cuestAttr = p.GetCustomAttributes(typeof(K3FieldAttribute), false);
                K3FieldAttribute k3Field;
                string           fieldName;

                //不参与转换
                if (cuestAttr.Length > 0 && (cuestAttr[0] as K3FieldAttribute).K3FieldType.Contains(K3FieldTypeEnum.Nothing))
                {
                    continue;
                }

                if (cuestAttr.Length == 0)
                {
                    //如果什么都不填,使用默认转换
                    k3Field = new K3FieldAttribute();
                }
                else
                {
                    k3Field = cuestAttr[0] as K3FieldAttribute;
                }

                fieldName = k3Field.Name;
                //如果没有设置模型对应的UI字段名称,则UI字段名称与Model名称一致
                if (string.IsNullOrEmpty(fieldName))
                {
                    fieldName = p.Name;
                }

                //双向绑定
                if (k3Field.K3FieldType.Contains(K3FieldTypeEnum.All))
                {
                    p.SetValue(result, k3Field.k3FieldSetValueFunc.UiToModelValue(rowItem[fieldName].Value), null);
                }

                //绑定Ui基资料的Value到Model
                if (k3Field.K3FieldType.Contains(K3FieldTypeEnum.Db_UiValueToModel))
                {
                    p.SetValue(result, k3Field.k3FieldSetValueFunc.UiToModelValue(rowItem[fieldName].Value), null);
                }

                //绑定Ui基资料的Number到Model
                if (k3Field.K3FieldType.Contains(K3FieldTypeEnum.Db_UiNumberToModel))
                {
                    p.SetValue(result, k3Field.k3FieldSetValueFunc.UiToModelValue(rowItem[fieldName].Number), null);
                }

                //绑定Ui基资料的Name到Model
                if (k3Field.K3FieldType.Contains(K3FieldTypeEnum.Db_UiNameToModel))
                {
                    p.SetValue(result, k3Field.k3FieldSetValueFunc.UiToModelValue(rowItem[fieldName].Name), null);
                }
            }
            return(result);
        }
Esempio n. 2
0
        /// <summary>
        /// 模型绑定到单据头
        /// </summary>
        /// <param name="head"></param>
        /// <param name="model"></param>
        public void SetModelToHead(IHead head, object model)
        {
            Type type = model.GetType(); //获取类型
            var  propertyInfoArray = type.GetProperties();

            foreach (var p in propertyInfoArray)
            {
                var cuestAttr = p.GetCustomAttributes(typeof(K3FieldAttribute), false);
                K3FieldAttribute k3Field;
                string           fieldName;
                var value = p.GetValue(model, null);//当前Model字段值

                //不参与转换
                if (cuestAttr.Length > 0 && (cuestAttr[0] as K3FieldAttribute).K3FieldType.Contains(K3FieldTypeEnum.Nothing))
                {
                    continue;
                }

                if (cuestAttr.Length == 0)
                {
                    //如果什么都不填,使用默认转换
                    k3Field = new K3FieldAttribute();
                }
                else
                {
                    k3Field = cuestAttr[0] as K3FieldAttribute;
                }

                value = k3Field.k3FieldSetValueFunc.ModelToUiValue(value);

                fieldName = k3Field.Name;
                //如果没有设置模型对应的UI字段名称,则UI字段名称与Model名称一致
                if (string.IsNullOrEmpty(fieldName))
                {
                    fieldName = p.Name;
                }

                //双向绑定
                if (k3Field.K3FieldType.Contains(K3FieldTypeEnum.All))
                {                    //如果为空则给空值
                    if (value == null || string.IsNullOrEmpty(value.ToString()))
                    {
                        head[fieldName].Value = "";
                        continue;
                    }
                    head[fieldName].Value = value.ToString();
                }

                //模型的基础资料值为Name
                if (k3Field.K3FieldType.Contains(K3FieldTypeEnum.Db_ModelNameToUi))
                {
                    //如果为空则给空值
                    if (value == null || string.IsNullOrEmpty(value.ToString()))
                    {
                        head[fieldName].Value = "";
                        continue;
                    }
                    head[fieldName].Value = this.baseDataDao.GetListByName(k3Field.ItemType, value.ToString())[0].FName;
                }

                //模型的基础资料值为Number
                if (k3Field.K3FieldType.Contains(K3FieldTypeEnum.Db_ModelNumberToUi))
                {
                    head[fieldName].Value = value.ToString();
                }
            }
        }