DataGridView和定时器

一、DataGridView

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

cs 复制代码
public class Student
{
    public string Name { get; set; }
    public int Age {  get; set; }
    public string Info {  get; set; }

}
cs 复制代码
 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 = "委内瑞拉总统被捕" });

两个重要代码

cs 复制代码
 //AutoGenerateColumns是否自动生成列,设置为false 需要自己通过界面绑定类的属性(自己设置列的标题、自己设置列显示哪个属性)
 //设置为true,表格自动显示列的标题为绑定类的属性
 dataGridView1.AutoGenerateColumns = false;

//dataGridView1 表格 可以通过DataSource属性进行绑定数据源,但是后续添加的新的数据不会立即显示到控件上,需要
// 再次对 dataGridView1.DataSource=null之后 再重新赋值
dataGridView1.DataSource = list;

如图

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

选择数据源

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

增删改查

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

cs 复制代码
 //添加数据源的方法
 private void button1_Click(object sender, EventArgs e)
 {
     list.Add(new Student() { Name = "张三4", Age = 40, Info = "委内瑞拉总统被捕" });
     dataGridView1.DataSource = null;
     dataGridView1.DataSource = list;

 }
cs 复制代码
//删除数据源的方法
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("删除成功");
}
cs 复制代码
//查询数据源 把满足查询条件的数据源重新绑定给表格
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;
}
        
cs 复制代码
//修改数据源
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

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

必要设置

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

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

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

cs 复制代码
  {
      this.timer1.Start(); //开启定时器
  }

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

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

cs 复制代码
 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;
     }

 }
相关推荐
工程师0071 分钟前
C# 装箱、拆箱 底层原理
c#·装箱和拆箱
万粉变现经纪人33 分钟前
如何解决 pip install llama-cpp-python 报错 未安装 CMake/Ninja 或 CPU 不支持 AVX 问题
开发语言·python·开源·aigc·pip·ai写作·llama
清风明月一壶酒1 小时前
OpenClaw自动处理Word文档全流程
开发语言·c#·word
其实防守也摸鱼1 小时前
CTF密码学综合教学指南--第五章
开发语言·网络·笔记·python·安全·网络安全·密码学
小郑加油2 小时前
python学习Day12:pandas安装与实际运用
开发语言·python·学习
AC赳赳老秦2 小时前
投标合规提效:用 OpenClaw 实现标书 / 合同自动审核、关键词校验、格式优化,降低废标风险
开发语言·前端·python·eclipse·emacs·deepseek·openclaw
KuaCpp2 小时前
C++面向对象(速过复习版)
开发语言·c++
wbs_scy3 小时前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言
2zcode3 小时前
基于MATLAB元胞自动机(CA)的AZ80A镁合金动态再结晶(DRX)过程模拟
开发语言·matlab·动态再结晶
iCxhust3 小时前
微机原理实践教程(C语言篇)---A001闪烁灯
c语言·开发语言·汇编·单片机·嵌入式硬件·51单片机·微机原理