Exemplo n.º 1
0
        public PropertyEditor AddEditorForMember(MemberInfo member, IEnumerable <object> values = null, PropertyEditor replaceOld = null)
        {
            if (!(member is FieldInfo) && !(member is PropertyInfo))
            {
                throw new ArgumentException("Only PropertyInfo and FieldInfo members are supported");
            }

            PropertyEditor e;
            Type           editType = ReflectTypeForMember(member, values ?? this.GetValue());

            e = this.AutoCreateMemberEditor(member);
            if (e == null)
            {
                e = this.ParentGrid.CreateEditor(editType, this);
            }
            if (e == null)
            {
                return(null);
            }

            e.BeginUpdate();
            {
                if (member is PropertyInfo)
                {
                    PropertyInfo property = member as PropertyInfo;
                    e.Getter       = this.CreatePropertyValueGetter(property);
                    e.Setter       = property.CanWrite ? this.CreatePropertyValueSetter(property) : null;
                    e.PropertyName = property.Name;
                    e.EditedMember = property;
                    e.NonPublic    = !this.memberPredicate(property, false);
                }
                else if (member is FieldInfo)
                {
                    FieldInfo field = member as FieldInfo;
                    e.Getter       = this.CreateFieldValueGetter(field);
                    e.Setter       = this.CreateFieldValueSetter(field);
                    e.PropertyName = field.Name;
                    e.EditedMember = field;
                    e.NonPublic    = !this.memberPredicate(field, false);
                }

                if (replaceOld != null)
                {
                    this.AddPropertyEditor(e, replaceOld);
                    this.RemovePropertyEditor(replaceOld);
                    replaceOld.Dispose();
                }
                else
                {
                    this.AddPropertyEditor(e);
                }
                this.ParentGrid.ConfigureEditor(e);
            }
            e.EndUpdate();

            return(e);
        }
        public PropertyEditor AddEditorForMember(MemberInfo member, IEnumerable<object> values = null, PropertyEditor replaceOld = null)
        {
            if (!(member is FieldInfo) && !(member is PropertyInfo))
            {
                throw new ArgumentException("Only PropertyInfo and FieldInfo members are supported");
            }

            PropertyEditor e;
            Type editType = ReflectTypeForMember(member, values ?? this.GetValue());
            e = this.AutoCreateMemberEditor(member);
            if (e == null) e = this.ParentGrid.CreateEditor(editType, this);
            if (e == null) return null;

            e.BeginUpdate();
            {
                if (member is PropertyInfo)
                {
                    PropertyInfo property = member as PropertyInfo;
                    e.Getter = this.CreatePropertyValueGetter(property);
                    e.Setter = property.CanWrite ? this.CreatePropertyValueSetter(property) : null;
                    e.PropertyName = property.Name;
                    e.EditedMember = property;
                    e.NonPublic = !this.memberPredicate(property, false);
                }
                else if (member is FieldInfo)
                {
                    FieldInfo field = member as FieldInfo;
                    e.Getter = this.CreateFieldValueGetter(field);
                    e.Setter = this.CreateFieldValueSetter(field);
                    e.PropertyName = field.Name;
                    e.EditedMember = field;
                    e.NonPublic = !this.memberPredicate(field, false);
                }

                if (replaceOld != null)
                {
                    this.AddPropertyEditor(e, replaceOld);
                    this.RemovePropertyEditor(replaceOld);
                    replaceOld.Dispose();
                }
                else
                {
                    this.AddPropertyEditor(e);
                }
                this.ParentGrid.ConfigureEditor(e);
            }
            e.EndUpdate();

            return e;
        }