public DCInfo PickUp(Control ctr) { DCInfo info = new DCInfo(); PickUp(ctr, "", "基本信息", info); return(info); }
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); }
/// <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); }
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); }
/// <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); }
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); }