前面写过一篇博客:
PropertyGrid排序http://greatverve.cnblogs.com/archive/2012/02/08/propergrid-order.html
这里没有解决类别排序的问题,所以到csdn提问了,结果半天没人回复,就忘了。
今天偶尔看到有人回复了,并且解决了类别排序的问题,真是太感谢了。现分享给大家。

PropertySorter 类请查看上一篇博客。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using OrderedPropertyGrid;
using System.Reflection;

namespace WinToXml
{
    public partial class Form11 : Form
    {
        public Form11()
        {
            InitializeComponent(); propertyGrid1.SelectedObjectsChanged += new EventHandler(propertyGrid1_SelectedObjectsChanged);
            propertyGrid1.SelectedObject = new Person();
        }

void propertyGrid1_SelectedObjectsChanged(object sender, EventArgs e)
        {
            propertyGrid1.Tag = propertyGrid1.PropertySort;
            propertyGrid1.PropertySort = PropertySort.CategorizedAlphabetical;
            propertyGrid1.Paint += new PaintEventHandler(propertyGrid1_Paint);
        }

void propertyGrid1_Paint(object sender, PaintEventArgs e)
        {
            var categorysinfo = propertyGrid1.SelectedObject.GetType().GetField("categorys", BindingFlags.NonPublic | BindingFlags.Instance);
            if (categorysinfo != null)
            {
                var categorys = categorysinfo.GetValue(propertyGrid1.SelectedObject) as List<String>;
                propertyGrid1.CollapseAllGridItems();
                GridItemCollection currentPropEntries = propertyGrid1.GetType().GetField("currentPropEntries", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(propertyGrid1) as GridItemCollection;
                var newarray = currentPropEntries.Cast<GridItem>().OrderBy((t) => categorys.IndexOf(t.Label)).ToArray();
                currentPropEntries.GetType().GetField("entries", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(currentPropEntries, newarray);
                propertyGrid1.ExpandAllGridItems();
                propertyGrid1.PropertySort = (PropertySort)propertyGrid1.Tag;
            }
            propertyGrid1.Paint -= new PaintEventHandler(propertyGrid1_Paint);
        }

[TypeConverter(typeof(PropertySorter))]
        [DefaultProperty("Name")]
        public class Person
        {
            private List<string> categorys = new List<string>() { "B", "A", "C" };//排序
            private string _name = "Bob";
            private string _name1 = "Bob1";
            private DateTime _birthday = new DateTime(1975, 1, 1);

[Category("A"), PropertyOrder(10)]
            public string Name
            {
                get { return _name; }
                set { _name = value; }
            }
            [Category("A"), PropertyOrder(9)]
            public string Name1
            {
                get { return _name1; }
                set { _name1 = value; }
            }

[Category("B"), PropertyOrder(11)]
            public DateTime Birthday
            {
                get { return _birthday; }
                set { _birthday = value; }
            }

[Category("C"), PropertyOrder(12)]
            public int Age
            {
                get
                {
                    TimeSpan age = DateTime.Now - _birthday;
                    return (int)age.TotalDays / 365;
                }
            }
        }
    }
}

url:http://greatverve.cnblogs.com/archive/2012/02/20/propergrid-category-order.html
参考:http://topic.csdn.net/u/20120208/13/24948256-e0f4-4e64-9c3c-095dc20f7ccf.html

PropertyGrid类别排序相关推荐

  1. PropertyGrid控件 分类(Category)及属性(Property)排序

    最近在做表单设计器,设计器上的控件都是我们自己封装的,但每个属性类别里的属性是按照属性的拼音排序的,现在想按照PropertyIndex标识进行排序(PropertyIndex的后三位是用来标识编辑器 ...

  2. C# PropertyGrid 简单使用

    目录 一. 导入数据 二. PropertyGrid 的简单属性配置 三. 设置字段属性 四. 字段的下拉框 五. 多级展开 六. 显示内容的排序 6.1 属性排序 6.1.1 自定义排序 6.1.2 ...

  3. 创建自定义排序用户界面

    简介 显示大量已经按类别(不是很多)排序的数据但没有类别分界线,用户很难找到所需要的类别.例如,数据库中只有9个类别(8个不同的类别和1个null),共81种产品.现在用一个GridView列出所有产 ...

  4. Winform中DataGridView绑定IList数据源后的排序

    首先,实现ICompare接口 public class ObjectPropertyCompare<T> : IComparer<T> { private PropertyD ...

  5. 算法笔记--八个常见排序算法总结

    一. 分类描述 1. 插入排序 直接插入排序:算法简单,稳定,适用于数据量小的情况 希尔排序:直接插入排序的改进版,不稳定,对于待排序序列的不同情况效率相近 2. 交换排序 冒泡排序:算法简单,稳定, ...

  6. 数据结构-常用的排序算法

    总第123篇 好久不见哈,我终于又更新了,惊不惊喜,意不意外,哈哈哈哈.等之后会专门写一篇文章给大家汇报汇报我最近在忙什么呢,今天这篇还是接着之前的数据结构系列继续,主要讲讲数据结构里面常用的几种排序 ...

  7. 各种排序算法的时间复杂度

    时间复杂度 当我们评价一个算法的时间性能时,主要标准就是算法的渐近时间复杂度,在算法分析时,经常是将渐近时间复杂度T(n)=O(f(n))简称为时间复杂度,其中的f(n)一般是算法中频度最大的语句频度 ...

  8. 可能存在无限递归_无限分类递归+排序解剖

    首先我们先了解一下递归函数: 递归函数在语言学习的时候会单独拿出来学习,因为它非常常用,本质上来讲递归函数就是调用自己的函数. 举个例子: test函数里面又再调用了自身,这就是俗称的递归函数!递归函 ...

  9. 排序算法的时间与空间复杂度分析

    时间复杂度 时间复杂度是同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率.算法分析的目的在于选择合适算法和改进算法. 计算机科学中,算法的时间复杂度是一个函数,它定性描述了该算 ...

  10. 八大排序算法比较及各自的特点

    一.总体比较 类别 排序算法 时间复杂度 空间复杂度 稳定性 平均情况 最好情况 最坏情况 辅助存储 插入排序 直接插入 稳定 希尔(shell)排序 不稳定 选择排序 直接选择 不稳定 堆排序 不稳 ...

最新文章

  1. Aizu 0525 Osenbei(状压+贪心)
  2. idea打断点启动项目后debug红点内没有√,导致无法调试
  3. 挑战程序设计竞赛_实力爆棚!2019年,华中科技大学拿下亚洲区竞赛金牌4枚!...
  4. 51单片机——DS18B20
  5. 03.结构化机器学习项目 W2.机器学习策略(2)
  6. 走进英特尔中国研究院探索创新日:发布最新科研成果与创新策略
  7. php如何将mysql数据库中的admin字段赋值给session_转php中使用session_set_save_handler()函数把session保存到MySQL数据库实例...
  8. 双11小米手机、AIoT销售成绩公布,雷军笑了
  9. 操作系统和语言的关系(转载)
  10. 解决办法:dpkg: 错误: 无法打开软件包的 info 文件 /var/lib/dpkg/available 以便读取: 没有那个文件或目录
  11. 获取HG526超级密码
  12. 中职计算机应用基础表格制作说课稿,表格制作的说课稿
  13. Unity 多点触控 禁用与启用
  14. 元编程: is_floating_point<Tp>
  15. 一台微型计算机字长为4个字节,若一台计算机的字长为4个字节,则表明该计算机()。...
  16. rsyslog+elk 网络设备日志收集及钉钉报警
  17. 阿里云服务器SSL不可用
  18. JS事件详解和js事件委托
  19. delphi(XE2)实现图片异形窗体,支持摆放控件
  20. 关于android 在黑屏情况下wifi下载速度慢的问题的解决。

热门文章

  1. icesat-2 数据产品
  2. EXCEL 分列功能的使用
  3. linx文件服务器命令,linux服务器文件命令
  4. 二分查找-----非递归方式
  5. 利用辗转相除法求两个数的最大公约数
  6. Android LiveData组件分析
  7. 用linux集成电路版图设计,集成电路版图设计项目化教程(第2版)
  8. matlab图像融合代码,图像融合+源代码+matlab
  9. 问题的分析与解决(培训总结)
  10. mc一进服务器就未响应,一进服务器就崩溃 大佬们求解