Пример #1
0
        public DCInfo PickUp(Control ctr)
        {
            DCInfo info = new DCInfo();

            PickUp(ctr, "", "基本信息", info);
            return(info);
        }
Пример #2
0
        private void PickUp(object o, string prefix, string label, DCInfo info)
        {
            DCPartInfo part = CreateDCPart(info, label);

            foreach (PropertyInfo prop in o.GetType().GetProperties())
            {
                if (Attribute.IsDefined(prop, typeof(IgnoreAttribute)))
                {
                    IgnoreAttribute attr = GetAttribute <IgnoreAttribute>(prop);

                    if (attr.Fields == null || attr.Fields.Length == 0)
                    {
                        continue;
                    }
                }

                string name = !String.IsNullOrEmpty(prefix) ? String.Format("{0}-{1}", prefix, prop.Name) : prop.Name;

                if (Attribute.IsDefined(prop, typeof(ChildrenAttribute)))
                {
                    DescAttribute desc = GetAttribute <DescAttribute>(prop);
                    PickUp(prop.GetValue(o, null), name,
                           desc != null ? desc.Title : String.Empty, info);
                }
                else if (Attribute.IsDefined(prop, typeof(OptionAttribute)))
                {
                    part.Params.Add(GetDCParam(prop, name));
                }
            }

            SortParam(part);
        }
Пример #3
0
        /// <summary>
        /// 创建DcPart
        /// </summary>
        /// <param name="info"></param>
        /// <param name="label"></param>
        #region DCPartInfo CreateDCPart(DCInfo info, string label)
        private DCPartInfo CreateDCPart(DCInfo info, string label)
        {
            DCPartInfo part = new DCPartInfo();

            part.Name = label;
            info.Parts.Add(part);
            return(part);
        }
Пример #4
0
        private void PickUp(object o, string prefix, string label, DCInfo info)
        {
            //反射元标记MetaData,筛选[属性名/ParameterAttribute]键值对
            Dictionary <string, ParameterAttribute> dictParams = BaseControlHelper.FilterParamAttrs(o, prefix);

            //获取DataControlParameters集合
            DCPartInfo part = CreateDCPart(info, label);

            part.Params = GetDataControlParameters(dictParams);

            //排序
            SortParam(part);
        }
Пример #5
0
        /// <summary>
        /// 从指定控件中取得配置信息
        /// </summary>
        /// <param name="path"></param>
        #region  从指定控件中取得配置信息
        public DCInfo PickUp(string path)
        {
            DCInfo info = new DCInfo();

            info.Path = path;

            Page page = new Page();

            if (page != null)
            {
                Control p = page.LoadControl(path);
                PickUp(p, "", "基本信息", info);
            }

            return(info);
        }
Пример #6
0
        public DataControl GetDataControlInfoDeeply(string path)
        {
            Page page = new Page();

            if (page != null)
            {
                Control p = page.LoadControl(path);

                //获取类上的ControlDescriptionAttribute
                MemberInfo mi = p.GetType();

                //控件描述
                List <ControlDescriptionAttribute> listParams = new List <ControlDescriptionAttribute>();
                ControlDescriptionAttribute        cda        =
                    (ControlDescriptionAttribute)Attribute.GetCustomAttribute
                        (mi, typeof(ControlDescriptionAttribute));
                if (cda != null)
                {
                    listParams.Add(cda);
                }

                //获取MetaData属性上的ControlDescriptionAttribute
                foreach (PropertyInfo prop in p.GetType().GetProperties())
                {
                    if (prop.Name == "MetaData")
                    {
                        //覆盖(使用MetaData上的ControlDescriptionAttribute属性覆盖类上的)
                        ControlDescriptionAttribute par = GetAttribute <ControlDescriptionAttribute>(prop);
                        if (par != null)
                        {
                            listParams.Clear();
                            listParams.Add(par);
                        }
                    }
                }
                //获取MetaData属性上的ControlDescriptionAttribute
                foreach (FieldInfo field in p.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase))
                {
                    if (field.Name == "MetaData")
                    {
                        //覆盖(使用MetaData上的ControlDescriptionAttribute属性覆盖类上的)
                        ControlDescriptionAttribute par = GetAttribute <ControlDescriptionAttribute>(field);
                        if (par != null)
                        {
                            listParams.Clear();
                            listParams.Add(par);
                        }
                    }
                }

                if (listParams.Count == 0)
                {
                    return(null);
                }

                #region 控件组描述
                List <ControlGroupDescriptionAttribute> listGroupParams = new List <ControlGroupDescriptionAttribute>();
                ControlGroupDescriptionAttribute        cgda            =
                    (ControlGroupDescriptionAttribute)Attribute.GetCustomAttribute
                        (mi, typeof(ControlGroupDescriptionAttribute));
                if (cgda != null)
                {
                    listGroupParams.Add(cgda);
                }

                //获取MetaData属性上的ControlDescriptionAttribute
                foreach (PropertyInfo prop in p.GetType().GetProperties())
                {
                    if (prop.Name == "MetaData")
                    {
                        //覆盖(使用MetaData上的ControlDescriptionAttribute属性覆盖类上的)
                        ControlGroupDescriptionAttribute par = GetAttribute <ControlGroupDescriptionAttribute>(prop);
                        if (par != null)
                        {
                            listGroupParams.Clear();
                            listGroupParams.Add(par);
                        }
                    }
                }
                //获取MetaData属性上的ControlDescriptionAttribute
                foreach (FieldInfo field in p.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase))
                {
                    if (field.Name == "MetaData")
                    {
                        //覆盖(使用MetaData上的ControlDescriptionAttribute属性覆盖类上的)
                        ControlGroupDescriptionAttribute par = GetAttribute <ControlGroupDescriptionAttribute>(field);
                        if (par != null)
                        {
                            listGroupParams.Clear();
                            listGroupParams.Add(par);
                        }
                    }
                }
                #endregion

                DataControl ctrl = new DataControl();
                ctrl.Control     = Path.GetFileNameWithoutExtension(path);
                ctrl.Author      = listParams[0].Author;
                ctrl.Description = listParams[0].Desc;
                //ctrl.Created = Convert.ToDateTime(listParams[0].Created);
                DateTime dt;
                ctrl.Created = DateTime.TryParse(listParams[0].Created, out dt) ? dt : DateTime.MinValue;
                ctrl.Tag     = listParams[0].Tag;
                //ctrl.Name = listParams[0].Name;
                ctrl.Name    = listParams[0].Desc;
                ctrl.Version = listParams[0].Version;

                if (listGroupParams.Count > 0)
                {
                    ctrl.GroupLabel       = listGroupParams[0].Label;
                    ctrl.GroupIcon        = listGroupParams[0].Icon;
                    ctrl.GroupDesc        = listGroupParams[0].Description;
                    ctrl.GroupDefaultType = listGroupParams[0].DefaultType;
                }

                DCInfo dc = PickUp(path);
                if (dc != null)
                {
                    foreach (DCPartInfo dpi in dc.Parts)
                    {
                        foreach (DataControlParameter dcp in dpi.Params)
                        {
                            ctrl.Parameters.Add(dcp);
                        }
                    }
                }
                return(ctrl);
            }

            return(null);
        }