C# 自定义属性在propertyGrid控件中显示

原创 2015年11月21日 12:45:02

在上篇文章(地址: C# 设计时动态改变实体在PropertyGrid中显示出来的属性)中可以看到:


自定义属性的显示是有问题的,那么如何修改呢?

代码如下:

public class PropertyDisplayConverterr<T> : ExpandableObjectConverter where T : IDisplay
    {
        public override bool CanConvertTo(ITypeDescriptorContext context, System.Type destinationType)
        {
            if (destinationType == typeof(T))
                return true;
            return base.CanConvertTo(context, destinationType);
        }
        // This is a special type converter which will be associated with the T class.
        // It converts an T object to string representation for use in a property grid.
        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, System.Type destinationType)
        {
            if (destinationType == typeof(System.String) && value is T)
            {
                return ((IDisplay)value).GetDisplayString();
            }
            return base.ConvertTo(context, culture, value, destinationType);
        }
    }
接口:

 public interface IDisplay
    {
        /// <summary>
        /// 得到显示字符串
        /// </summary>
        /// <returns></returns>
        string GetDisplayString();
    }
修改上文中实体类如下:

 [TypeConverterAttribute(typeof(PropertyDisplayConverterr<IdentityColumnEntity>))]
    public class IdentityColumnEntity : IDisplay
    {
        private bool isIncrementColumn;
        /// <summary>
        /// 是否是自增列
        /// </summary>
        [Browsable(true)]
        [Category("基本")]
        [DisplayName("是否是自增列")]
        [ReadOnly(false)]
        [DefaultValue(false)]
        public bool IsIncrementColumn
        {
            set { isIncrementColumn = value; }
            get { return isIncrementColumn; }
        }

        private Int64 identityIncrement;
        /// <summary>
        /// 标识增量
        /// </summary>
        [Browsable(true)]
        [Category("基本")]
        [DisplayName("标识增量")]
        [ReadOnly(false)]
        [Description("标识增量属性指定在 Microsoft SQL Server 为插入的行生成标识值时,在现有的最大行标识值基础上所加的值。标识增量必须是 非零 整数,位数等于或小于 10。")]
        public Int64 IdentityIncrement
        {
            set { identityIncrement = value; }
            get { return identityIncrement; }
        }

        private Int64 ident_Seed;
        /// <summary>
        /// 标识种子 
        /// </summary>
        [Browsable(true)]
        [Category("基本")]
        [DisplayName("标识种子")]
        [ReadOnly(false)]
        [Description("指示标识列的初始行值。标识种子必须是  整数,位数等于或小于 10。")]
        public Int64 Ident_Seed
        {
            set { ident_Seed = value; }
            get { return ident_Seed; }
        }

        public string GetDisplayString()
        {
            if (this == null || this.IdentityIncrement == 0)
            {
                return "未设置自增列信息";
            }
            return String.Format("标识种子:{0};标识增量:{1}", this.Ident_Seed, this.IdentityIncrement);
        }
    }
效果如下:


演示代码:点击打开链接

本文参考:Customized display of collection data in a PropertyGrid

参考文章中demo:点击打开链接


拓展:

C# where泛型约束

类型参数的约束(C# 编程指南)



版权声明:作者:jiankunking 出处:http://blog.csdn.net/jiankunking 本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

C#自定义PropertyGrid属性

最近用到了PropertyGrid,原来从来没用到过,拿在手里,一头雾水,经过一段时间研究后,大概理解了Property的使用方法,下面仔细剖析一下。 PropertyGrid控件就是Visual ...
  • jjhua
  • jjhua
  • 2014年04月07日 13:40
  • 15293

两点C#的propertyGrid的使用心得

第1点是关于控制PropertyGrid中属性的只读属性的。 我遇到的问题是这样的,我需要在运行时根据SVN的状态动态控制PropertyGrid中的属性的读写控制。以前的做法比较简单,直接是P...
  • fgjfj
  • fgjfj
  • 2016年05月31日 22:03
  • 181

jquery之操作元素属性和特性(设置特性值,attr(name,value),attr(attributes)方法的使用)

jquery之操作元素属性和特性(设置特性值,attr(name,value),attr(attributes)方法的使用)...
  • fhd001
  • fhd001
  • 2011年03月31日 00:49
  • 2229

C# 如何定义让PropertyGrid控件显示[...]按钮,并且点击后以下拉框形式显示自定义控件编辑属性值

首先定义一个要在下拉框显示的控件: using System; using System.Windows.Forms; namespace Simon.WinForms.Examples.P...

C# PropertyGrid控件的四个自定义操作

1>PropertyGid 控件输入时显示隐藏密码为(*)单独写一个PasswordStringConverter 类;using System.ComponentModel; using Syste...

C#自定义PropertyGrid属性

最近用到了PropertyGrid,原来从来没用到过,拿在手里,一头雾水,经过一段时间研究后,大概理解了Property的使用方法,下面仔细剖析一下。 PropertyGrid控件就是Visual S...

C#自定义PropertyGrid属性

最近用到了PropertyGrid,原来从来没用到过,拿在手里,一头雾水,经过一段时间研究后,大概理解了Property的使用方法,下面仔细剖析一下。 PropertyGrid控件就是Visual ...

C#自定义PropertyGrid属性

最近用到了PropertyGrid,原来从来没用到过,拿在手里,一头雾水,经过一段时间研究后,大概理解了Property的使用方法,下面仔细剖析一下。 PropertyGrid控件就是Visua...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 自定义属性在propertyGrid控件中显示
举报原因:
原因补充:

(最多只允许输入30个字)