新文章 网摘 文章 随笔 日记

在Model中使用属性定义DataGridView列显示顺序

    /// <summary>
    /// 用来定义字段或属性的显示顺序
    /// </summary>
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Event)]
    public class OrderAttribute : Attribute
    {
        /// <summary>
        /// 显示顺序
        /// </summary>
        public int Index { get; protected set; }
        public OrderAttribute(int index)
        {
            Index = index;
        }
    }

 

        /// <summary>
        /// 
        /// </summary>
        /// <param name="dgv"></param>
        /// <param name="modelType"></param>
        private void AdjustColumnOrder(DataGridView dgv, Type modelType)
        {
            if (dgv.Columns.Count == 0)
            {
                return;
            }
            Dictionary<string, int> dict = new Dictionary<string, int>();
            var properties = modelType.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty);
            foreach (var p in properties)
            {
                var orderAttr = (OrderAttribute)p.GetCustomAttribute(typeof(OrderAttribute));
                if (orderAttr != null)
                {
                    dict.Add(p.Name, orderAttr.Index);
                }
            }
            var idxs = dict.OrderBy(r => r.Value).ToList();
            foreach (var idx in idxs)
            {
                if (dgv.Columns.Contains(idx.Key))
                {
                    dgv.Columns[idx.Key].DisplayIndex = idx.Value ;
                }
            }
        }

 

    public class Class1
    {
        [Order(3)]
        public string A { get; set; }
        [Order(4)]
        public string B{ get; set; }
        [Order(0)]
        public string C { get; set; }
        [Order(1)]
        public string D { get; set; }
        [Order(2)]
        public string E{ get; set; }
    }

 

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            var list = GetData();
            dataGridView1.DataSource = list;
            AdjustColumnOrder(dataGridView1, typeof(Class1));

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="dgv"></param>
        /// <param name="modelType"></param>
        private void AdjustColumnOrder(DataGridView dgv, Type modelType)
        {
            if (dgv.Columns.Count == 0)
            {
                return;
            }
            Dictionary<string, int> dict = new Dictionary<string, int>();
            var properties = modelType.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty);
            foreach (var p in properties)
            {
                var orderAttr = (OrderAttribute)p.GetCustomAttribute(typeof(OrderAttribute));
                if (orderAttr != null)
                {
                    dict.Add(p.Name, orderAttr.Index);
                }
            }
            var idxs = dict.OrderBy(r => r.Value).ToList();
            foreach (var idx in idxs)
            {
                if (dgv.Columns.Contains(idx.Key))
                {
                    dgv.Columns[idx.Key].DisplayIndex = idx.Value ;
                }
            }
        }

        private List<Class1> GetData()
        {
            List<Class1> list = new List<Class1>()
            {
                new Class1{A="a",B="b",C="c",D="d",E="e"},
                new Class1{A="a",B="b",C="c",D="d",E="e"},
                new Class1{A="a",B="b",C="c",D="d",E="e"},
                new Class1{A="a",B="b",C="c",D="d",E="e"},
                new Class1{A="a",B="b",C="c",D="d",E="e"}
            };
            return list;
        }
    }

 

posted @ 2022-01-06 19:59  岭南春  阅读(53)  评论(0)    收藏  举报