C#学习笔记-Winform根据数据自动生成控件

本文介绍了如何通过SQLite数据库来动态生成UI界面,以减少代码修改。首先建立数据库连接,获取Student表数据,然后遍历数据创建Button控件,设置样式、坐标并关联点击事件。坐标计算基于控件的索引位置,实现动态布局。程序运行效果展示了数据与UI的结合。
摘要由CSDN通过智能技术生成

1、思路

      (1)获取一个集合(数据)

      (2)遍历集合,设置统一的控件样式、设置控件坐标

      (3)关联事件

2、实现

        项目开发中,当需求发生改变时,UI界面需要简单更改,这时代码就需要去修改,这样子做比较麻烦,因此可以通过获取数据库数的方式,增加、删除、更改,更改这部分简单的UI需求。

2.1 数据库连接配置

        本文采用SQLite轻量型数据库,配置数据库。

 实体类Student

    public class Student
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Number { get; set; }
        public string ClassName { get; set; }
    }

 获取数据库的数据保存到集合中

    public class StudentService
    {
        public static List<Student> CheckSQLite()
        {
            SQLiteHelper SQLiteHelper = new SQLiteHelper();        
            //string sql = $"select * from {SQL_Table} LIKE '{time}%'";
            string sql = "select * from Student WHERE Name !='NULL';";
            SQLiteDataReader reader = SQLiteHelper.GetReader(sql);
            List<Student> studentList = new List<Student>();
            while (reader.Read())
            {
                studentList.Add(new Student
                {                                   
                    ID= Convert.ToInt32(reader["ID"]),
                    Name= reader["Name"].ToString(),
                    Number = Convert.ToInt32(reader["Number"]),
                    ClassName= reader["ClassName"].ToString()
                });
            }
            reader.Close();
            return studentList;
        }

    }

下面以按钮Button为示例,设置统一演示,控件在UI上显示的,可以更具属性的一个标致位或集合的索引判断.

                坐标X=初始坐标+(index%行显示个数-1)*适应宽度--取余数

                坐标Y=初始坐标+(index/行显示个数)*适应宽度--取整除数

        private void LoadUI(List<Student> students)
        {
            foreach (var item in students)
            {
                Button button = new Button();
                button.Name = "B"+item.Number;
                button.Text = item.Name;
                button.Tag = $"{item.ID},{item.Name},{item.Number},{item.ClassName}";
                int x = 88; int y = 30;

                if (Convert.ToInt32(item.ID) % 7 != 0)
                {
                    x = 105 * ((Convert.ToInt32(item.ID) % 7) - 1) + 88;
                }
                y = 64 * (Convert.ToInt32(item.ID) / 7) + 30;

                button.Location = new System.Drawing.Point(x, y);
                button.Size = new System.Drawing.Size(100, 45);
                button.TextAlign = ContentAlignment.MiddleCenter;

                this.Controls.Add(button);
                button.Click += new EventHandler(button_Click);
            }
        }

把控件添加到 Controls控件集合中,并关联一个统一个事件,集中管理,通过控件的属性,完成逻辑上的控制

this.Controls.Add(button);
button.Click += new EventHandler(button_Click)
       private void button_Click(object sender, EventArgs e)
        {
            Button button = (Button)sender;
            MessageBox.Show(button.Text+"来自于"+button.Tag);
        }

程序运行效果

 

 本文相关Demo下载链接:https://download.csdn.net/download/qq_39157152/25970463

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值