/// <summary> /// 用ParameterAttribute复制一个DataControlParameter /// </summary> /// <param name="name">属性名</param> /// <param name="pa"></param> #region DataControlParameter CopyDCPfromParam(string name,ParameterAttribute pa) private DataControlParameter CopyDCPfromParam(string name, ParameterAttribute pa) { DataControlParameter param = new DataControlParameter(); param.Name = name; param.Data = pa.Data; param.DefaultValue = pa.DefaultValue; param.Description = pa.Description; param.Ignore = pa.Ignore; param.Length = pa.Length; param.Maximum = pa.Maxnum.ToString(); param.Minium = pa.Minnum.ToString(); param.Required = pa.Required; param.Title = pa.Title; param.Type = pa.Type; param.Weight = pa.Weight; param.SupportCopy = pa.SupportCopy; return(param); }
/// <summary> /// 通过MetaData字段来筛选ParameterAttribute属性 /// </summary> /// <param name="o">控件</param> /// <param name="prefix">前缀</param> /// <returns>属性名 ParameterAttribute 键值对</returns> #region static Dictionary<string,ParameterAttribute> FilterParamAttrs(object o,string prefix) public static Dictionary <string, ParameterAttribute> FilterParamAttrs(object o, string prefix) { Dictionary <string, ParameterAttribute> dictParamAttr = new Dictionary <string, ParameterAttribute>(); Dictionary <string, ParameterAttribute> dictParamAttrOnMetaData = new Dictionary <string, ParameterAttribute>(); List <RemoveParameterAttribute> listParamRemoveOnMetaData = new List <RemoveParameterAttribute>(); List <ClearParameterAttribute> listParamClearOnMetaData = new List <ClearParameterAttribute>(); foreach (PropertyInfo prop in o.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)) { string name = !String.IsNullOrEmpty(prefix) ? String.Format("{0}-{1}", prefix, prop.Name) : prop.Name; if (Attribute.IsDefined(prop, typeof(ParameterAttribute))) { if (prop.Name == "MetaData") { //MetaData可有多个元标记 //覆盖(在MetaData上使用ParameterAttribute的Name属性来进行覆盖) List <ParameterAttribute> pars = GetAttributes <ParameterAttribute>(prop); foreach (ParameterAttribute par in pars) { dictParamAttrOnMetaData.Add(par.Name, par); } //移除 List <RemoveParameterAttribute> parsRemove = GetAttributes <RemoveParameterAttribute>(prop); listParamRemoveOnMetaData.AddRange(parsRemove); //清除 List <ClearParameterAttribute> parsClear = GetAttributes <ClearParameterAttribute>(prop); listParamClearOnMetaData.AddRange(parsClear); } else { ParameterAttribute par = GetAttribute <ParameterAttribute>(prop); if (par != null) { //如果Name为空,则Name对应属性名称 if (string.IsNullOrEmpty(par.Name)) { par.Name = prop.Name; } dictParamAttr.Add(prop.Name, par); } } } //反射属性字段的内部 if (Attribute.IsDefined(prop, typeof(ChildrenAttribute))) { object child = prop.GetValue(o, null); GetParamAttrs(o, prop.Name, ref dictParamAttr); } } foreach (FieldInfo prop in o.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase)) { string name = !String.IsNullOrEmpty(prefix) ? String.Format("{0}-{1}", prefix, prop.Name) : prop.Name; if (prop.Name == "MetaData") { //MetaData可有多个元标记 //覆盖(在MetaData上使用ParameterAttribute的Name属性来进行覆盖) List <ParameterAttribute> pars = GetAttributes <ParameterAttribute>(prop); foreach (ParameterAttribute par in pars) { if (!String.IsNullOrEmpty(par.Name)) { dictParamAttrOnMetaData.Add(par.Name, par); } } //移除 List <RemoveParameterAttribute> parsRemove = GetAttributes <RemoveParameterAttribute>(prop); listParamRemoveOnMetaData.AddRange(parsRemove); //清除 List <ClearParameterAttribute> parsClear = GetAttributes <ClearParameterAttribute>(prop); listParamClearOnMetaData.AddRange(parsClear); } else { ParameterAttribute par = GetAttribute <ParameterAttribute>(prop); if (par != null) { //如果Name为空,则Name对应属性名称 if (string.IsNullOrEmpty(par.Name)) { par.Name = prop.Name; } if (!dictParamAttr.ContainsKey(prop.Name)) { dictParamAttr.Add(prop.Name, par); } } } //反射属性字段的内部 if (Attribute.IsDefined(prop, typeof(ChildrenAttribute))) { object child = prop.GetValue(o); GetParamAttrs(child, prop.Name, ref dictParamAttr); } } if (dictParamAttr.Count == 0) { return(null); } if (dictParamAttrOnMetaData.Count == 0 && listParamClearOnMetaData.Count == 0 && listParamRemoveOnMetaData.Count == 0) { return(dictParamAttr); } //清空属性不为空,则返回MetaData上的ParamterAttribute集合 if (listParamClearOnMetaData.Count > 0) { return(dictParamAttrOnMetaData); } if (listParamRemoveOnMetaData.Count > 0) { //移除 foreach (RemoveParameterAttribute parRemove in listParamRemoveOnMetaData) { dictParamAttr.Remove(parRemove.PropertyName); } //重写(移除属性重名项) foreach (KeyValuePair <string, ParameterAttribute> pair in dictParamAttrOnMetaData) { dictParamAttr.Remove(pair.Key); } } if (dictParamAttr.Count > 0) { //转储 foreach (KeyValuePair <string, ParameterAttribute> pair in dictParamAttr) { if (!dictParamAttrOnMetaData.ContainsKey(pair.Key)) { dictParamAttrOnMetaData.Add(pair.Key, pair.Value); } } } return(dictParamAttrOnMetaData); }