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

在上篇文章(地址: 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# 编程指南)

时间: 2024-09-17 07:59:09

C# 自定义属性在propertyGrid控件中显示的相关文章

PropertyGrid控件中为空值如何设置为null

问题描述 我使用了PropertyGrid控件,读取数据库中某行的值加到PropertyGrid控件中,如果某列的值为空,在PropertyGrid控件中显示这行的值为只读,我现在想,当为空值的时候,不管是int.string.double等都赋值"null",并且在PropertyGrid控件中显示也不为只读.请问如何处理?? 解决方案 解决方案二:这里面值为空的,就是只读.想做成这样,值为空,给他空或null,也不能是只读.解决方案三:赋值的时候判断一下不就行了.info.Name

数据库操作-该程序运行之后数据没在textbox控件中显示,请问需要修改哪里

问题描述 该程序运行之后数据没在textbox控件中显示,请问需要修改哪里 using System.Data.SqlClient; namespace 学生信息浏览 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } BindingSource bs = new BindingSource(); private void Form1_Load(object sender, EventAr

vb mschart 字体颜色-关于VB的MSChart控件中显示标签文本颜色的问题?

问题描述 关于VB的MSChart控件中显示标签文本颜色的问题? 我的目标是显示两条温度-时间曲线,一条是实际值(红色),一条是设定值(蓝色),两条线的颜色不同,字体与曲线颜色相同,显示完成后,红色的曲线中,有几个点的字体颜色为黑色,代码如下: With MSChart1 .ChartType = VtChChartType2dLine .Plot.Axis(VtChAxisIdX).ValueScale.Auto = False .Plot.Axis(VtChAxisIdY).ValueSca

图片加载-怎么在一个对话框中单击一个按钮后在另一个对话框中的picture控件中显示一张bmp格式的图片

问题描述 怎么在一个对话框中单击一个按钮后在另一个对话框中的picture控件中显示一张bmp格式的图片 我是大一学生,在用mfc做一个员工管理系统,要求在一个对话框的list control 控件中选择一条员工信息,点击一下"显示全部信息"按钮后,弹出一个对话框,这个对话框上的picture控件能显示这个人对应的照片.这个人对应的照片我放在资源文件夹下面.其他我都会,就是照片显示这方面我不知道应该怎么做?各位大神求指教. 解决方案 一个对话框调用另一个对话框的控件值 解决方案二: h

mfc-怎样在MFC的listbox控件中显示数据库的表

问题描述 怎样在MFC的listbox控件中显示数据库的表 在listbox控件中显示数据库中已经存在的表,代码该怎么写,初学菜鸟请教各位~(≧▽≦)/~啦啦啦 解决方案 参考:http://download.csdn.net/detail/qkill/5867135 解决方案二: 这个问题应该分为两部分来分析(1)是读取数据库(2)将读取到的数据显示在 List 中不知道你是哪部分不清楚?显示数据在 List 很简单的,调用 List 的 Insert 成员就可以完成数据增加到 List 中.

地图-VS2013中ASPNET项目运行map控件中显示空白?

问题描述 VS2013中ASPNET项目运行map控件中显示空白? arcgis server10地图服务发布且启动,VS2013中ASPNET项目运行map控件中显示空白?项目右键没有add gis identity,怎么回事,怎么解决? 解决方案 您好,解决了吗?我也遇到这个问题,求助!

bitmap c# c++-C#处理C++的的返回值Cbitmap*生成图像在控件中显示

问题描述 C#处理C++的的返回值Cbitmap*生成图像在控件中显示 Cbitmap* userGetBitmap(HWND hwnd,int nBMPWIDTH,int nBMPHEIGHT): hwnd需要显示当前图像的窗口句柄 nBMPWIDTH 需要生成的图像的像素宽度 nBMPHEIGHT需要生成的图像的像素高度 C++的DLL中有如上函数,请问,用C#如何接招.如何用C#要根据上面的函数生成一个图片并在控件中显示. 解决方案 Cbitmap* userGetBitmap(HWND

小白请教个关于DataGridView控件中显示数据的问题。

问题描述 小白请教个关于DataGridView控件中显示数据的问题. private void button1_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection("server = USER-20150322KM;database = huanghe;uid = sa; pwd = 121212"); SqlDataAdapter sda = new SqlDataAdapter(&q

【求助】如何打印DataGridView控件中显示的内容

问题描述 如何打印DataGridView控件中显示的内容,各位大虾有没有源代码示例一下! 解决方案 解决方案二:up解决方案三:up解决方案四:据我知道是截屏打印,在此把必要的代码附上.需要从工具箱中添加PringDocument在这里命名为pdusingSystem.Drawing.Printing;publicpartialclassI03_01:Baosight.iSuperFrame.Forms.FormBase{[System.Runtime.InteropServices.DllI