news 2026/5/1 11:03:47

DataGridView和定时器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DataGridView和定时器

一、DataGridView

首先将控件添加到窗体,代码写一个对象用来生成表格

public class Student { public string Name { get; set; } public int Age { get; set; } public string Info { get; set; } }
public List<Student> list = new List<Student>(); list.Add(new Student() { Name = "张三1", Age = 10, Info = "委内瑞拉总统被捕" }); list.Add(new Student() { Name = "张三2", Age = 20, Info = "委内瑞拉总统被捕" }); list.Add(new Student() { Name = "张三3", Age = 30, Info = "委内瑞拉总统被捕" });

两个重要代码

//AutoGenerateColumns是否自动生成列,设置为false 需要自己通过界面绑定类的属性(自己设置列的标题、自己设置列显示哪个属性) //设置为true,表格自动显示列的标题为绑定类的属性 dataGridView1.AutoGenerateColumns = false; //dataGridView1 表格 可以通过DataSource属性进行绑定数据源,但是后续添加的新的数据不会立即显示到控件上,需要 // 再次对 dataGridView1.DataSource=null之后 再重新赋值 dataGridView1.DataSource = list;

如图

在属性添加列名,达到上图效果

选择数据源

数据源是生成对象的属性。

增删改查

现在用Button写一个增删改查的效果

//添加数据源的方法 private void button1_Click(object sender, EventArgs e) { list.Add(new Student() { Name = "张三4", Age = 40, Info = "委内瑞拉总统被捕" }); dataGridView1.DataSource = null; dataGridView1.DataSource = list; }
//删除数据源的方法 private void button2_Click(object sender, EventArgs e) { //先判断是否选中行 //SelectedRows 选中的行 可以选择多个 if (dataGridView1.SelectedRows.Count==0) //没选中行 { MessageBox.Show("请先选中要删除的一行"); return; } //选中行了 获取选中的一行索引值 或者这一行对象 Student stu = null; //要删除的一行对象 // DataBoundItem 获取选中行绑定对象 // as 强制转换成Student对象 stu = dataGridView1.SelectedRows[0].DataBoundItem as Student; //MessageBox.Show(stu.Name); //MessageBox.Show是有返回值的,为DialogResult对象(对话结果对象), DialogResult result = MessageBox.Show("是否要删除改行", "温馨提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (result != DialogResult.Yes) //如果没有选择yes 直接return { return; } //如果选择警告框的Yes键时候 再删除 list.Remove(stu); //刷新界面 dataGridView1.DataSource = null; dataGridView1.DataSource = list; //删除成功之后 可以再次提示一下 MessageBox.Show("删除成功"); }
//查询数据源 把满足查询条件的数据源重新绑定给表格 private void button3_Click(object sender, EventArgs e) { //FindAll() 查找满足条件的所有的元素对象, 与输入框文本内容一样的对象 List<Student> currentList = list.FindAll(v => v.Name == textBox1.Text); if (currentList.Count==0) { MessageBox.Show("没找到要找的学生"); return; } dataGridView1.DataSource = null; dataGridView1.DataSource = currentList; }
//修改数据源 private void button4_Click(object sender, EventArgs e) { if (dataGridView1.SelectedRows.Count == 0) { MessageBox.Show("请先选中要修改的一行"); return; } // 获取选中一行的对象 DataGridViewRow cc = dataGridView1.SelectedRows[0]; Student stu = cc.DataBoundItem as Student; stu.Name = "高达"; stu.Age = 20; stu.Info = "人在搭在"; dataGridView1.DataSource = null; dataGridView1.DataSource = list; // 获取单元格的内容 // Cells["Name1"] 获取name属性为Name1单元格的内容 // MessageBox.Show(dataGridView1.SelectedRows[0].Cells["Name1"].Value.ToString()); // DataGridViewRow cc1 = dataGridView1.SelectedRows[0]; // MessageBox.Show(cc1.Cells["Name1"].Value.ToString()); } //当行重新绘制的时候触发函数

二、WinForm定时器

Timer

控件名称:Timer

在窗体中是不显示定时器的

必要设置

this.timer1.Stop();// 关闭定时器 this.timer1.Start();//开启定时器 this.timer1.Enabled = true; //设置定时器为激活状态的 this.timer1.Interval = 10;//触发定时器函数时间间隔 ms为单位

1,2和3是同效果,写一个就行

也可以将定时器写到Button中,按钮控制定时器开启或关闭

{ this.timer1.Start(); //开启定时器 } private void stopTimer_Click(object sender, EventArgs e) { this.timer1.Stop();// 关闭定时器 }

现在写一个1秒改变文本颜色,并且文本向下移动

Random ran = new Random();//随机数对象 int count = 0; //定时器事件 private void timer1_Tick(object sender, EventArgs e) { count++; //MessageBox.Show("定时器事件") ; //Color.FromArgb(255, 255, 255) 通过三原色取值合成一个颜色 //三个值分别为红绿蓝 值的范围0-255,哪个值越大,越接近该颜色,255,255,255 白色;0,0,0 黑色, int r = ran.Next(256); int g = ran.Next(256); int b = ran.Next(256); label1.BackColor = Color.FromArgb(r, g, b); //label1.Left label的左边的距离 label1.Location = new Point(label1.Left, count); if (count>=400) { count = 0; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 6:55:06

Windows平台安装Visual Studio Runtime依赖

Windows平台安装Visual Studio Runtime依赖 在部署像 Fun-ASR 这样的本地化语音识别系统时&#xff0c;你是否曾遇到过这样的场景&#xff1a;明明 pip install 成功了&#xff0c;Python 脚本语法也没问题&#xff0c;可一运行 start_app.sh 就弹出“找不到指定模块”或“DLL…

作者头像 李华
网站建设 2026/4/30 11:48:00

CSV/JSON双格式导出:Fun-ASR批量处理结果无缝对接BI

CSV/JSON双格式导出&#xff1a;Fun-ASR批量处理结果无缝对接BI 在企业数字化转型的浪潮中&#xff0c;语音数据正从“被忽略的副产品”转变为关键的业务洞察来源。客服中心每天产生成百上千通通话录音&#xff0c;会议室里回荡着项目决策的每一句讨论&#xff0c;这些声音背后…

作者头像 李华
网站建设 2026/4/16 15:11:59

树莓派与MPU6050陀螺仪通信:I2C多字节读取全面讲解

树莓派与MPU6050通信实战&#xff1a;如何高效读取多字节传感器数据 你有没有遇到过这样的情况&#xff1f;在用树莓派读取陀螺仪数据时&#xff0c;姿态解算结果总是“抖”得厉害&#xff0c;滤波算法怎么调都不理想。调试半天才发现——问题不在算法&#xff0c;而在于 你读…

作者头像 李华
网站建设 2026/5/1 9:32:55

DMA存储器到外设传输错误排查与调试技巧

DMA存储器到外设传输&#xff1a;那些年我们踩过的坑与调试秘籍你有没有遇到过这样的场景&#xff1f;系统跑得好好的&#xff0c;突然音频播放“咔哒”一声&#xff0c;像是踩到了电门&#xff1b;串口发出去的数据前几个字节总是乱码&#xff1b;或者更糟——程序莫名其妙进了…

作者头像 李华
网站建设 2026/5/1 8:01:58

Docker镜像发布:funasr-webui:latest一键部署

Docker镜像发布&#xff1a;funasr-webui:latest一键部署 在语音技术快速渗透各行各业的今天&#xff0c;一个常见的挑战摆在开发者面前&#xff1a;如何让高精度的语音识别模型走出实验室&#xff0c;真正落地到会议记录、客服质检或教学辅助等实际场景中&#xff1f;传统ASR系…

作者头像 李华
网站建设 2026/5/1 9:42:28

Kibana机器学习模块详解:依托elasticsearch官网数据

Kibana机器学习实战指南&#xff1a;从官网示例数据到真实异常检测 你有没有遇到过这种情况——系统突然变慢&#xff0c;但所有监控指标都在“正常范围”内&#xff1f;或者安全团队告诉你可能被攻击了&#xff0c;可防火墙日志里却找不到明显的入侵痕迹&#xff1f; 传统的阈…

作者头像 李华