这篇文章告诉你自定义特性能做什么?

本文介绍如何基于自定义特性实现DataGridView的全自动生成,适用于列数多且变动频繁的场景。通过创建窗体应用,设置DataGridView控件并编写初始化方法,结合后台代码动态生成数据,减少了手动维护的繁琐工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

各位小伙伴,大家周末愉快。

最近这段时间比较忙,所以文章更新节奏有点慢,请见谅!

今天跟大家分享的主题是基于自定义特性实现DataGridView全自动生成。

实现过程

这里是在上一篇文章《给你的属性加个说明》的基础上,对其做进一步应用。

给你的属性加个说明

首先创建一个窗体应用,在窗体里拖放一个DataGridView控件和一个生成数据的按钮,将DataGridView控件的启用添加、启用编辑、启用删除的勾选都去掉。(想了解更多的内容,欢迎加VX:xiketang777)

后台编写一个初始化DataGridView的方法,代码如下。

        private void InitialDataGridView()
        {
            Type t = typeof(Points);
            foreach (PropertyInfo pi in t.GetProperties())
            {
                //获取属性名称
                string propertyName = pi.Name;
                //获取显示文本
                string displayName = pi.GetCustomAttribute<CustomAttribute>()?.DisplayName;
                //获取显示宽度
                int displayWidth = pi.GetCustomAttribute<CustomAttribute>().DisplayWidth;
                DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn()
                {
                    HeaderText = displayName,
                    Width = displayWidth,
                    DataPropertyName = propertyName,
                    SortMode = DataGridViewColumnSortMode.NotSortable,
                    AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet
                };      
                this.dgvMain.Columns.Add(column);
            }
        }

然后在构造方法里初始化调用一下:

        public FrmMain()
        {
            InitializeComponent();
            this.dgvMain.AutoGenerateColumns = false;
            InitialDataGridView();
        }

接着在生成数据按钮添加一些数据,代码如下:

        private void btn_Generate_Click(object sender, EventArgs e)
        {
            List<Points> Points = new List<Points>();
            for (int i = 1; i < 10; i++)
            {
                Points.Add(new Points()
                {
                    StationNo = "站点" + 1,
                    TD_P1 = 123,
                    TD_P2 = 456,
                }); 
            }
            this.dgvMain.DataSource = null;
            this.dgvMain.DataSource = Points;
        }

点击生成数据按钮,效果如下:

这样就实现了动态生成DataGridView控件,后续如果需要更改名称或者增加列,直接去实体类修改即可,不需要再去修改DataGridView了。

这种方式非常适用于列数非常多且不确定因素非常多的情况,比如配方应用等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

常哥说编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值