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;
     }

 }
相关推荐
玄同7652 小时前
从 0 到 1:用 Python 开发 MCP 工具,让 AI 智能体拥有 “超能力”
开发语言·人工智能·python·agent·ai编程·mcp·trae
czy87874752 小时前
深入了解 C++ 中的 `std::bind` 函数
开发语言·c++
消失的旧时光-19432 小时前
从 Kotlin 到 Dart:为什么 sealed 是处理「多种返回结果」的最佳方式?
android·开发语言·flutter·架构·kotlin·sealed
yq1982043011562 小时前
静思书屋:基于Java Web技术栈构建高性能图书信息平台实践
java·开发语言·前端
一个public的class2 小时前
你在浏览器输入一个网址,到底发生了什么?
java·开发语言·javascript
Jinkxs2 小时前
Gradle - 与Groovy/Kotlin DSL对比 构建脚本语言选择指南
android·开发语言·kotlin
&有梦想的咸鱼&2 小时前
Kotlin委托机制的底层实现深度解析(74)
android·开发语言·kotlin
BD_Marathon3 小时前
设计模式——依赖倒转原则
java·开发语言·设计模式
devmoon3 小时前
在 Polkadot Runtime 中添加多个 Pallet 实例实战指南
java·开发语言·数据库·web3·区块链·波卡
Evand J3 小时前
TDOA(到达时间差)的GDOP和CRLB计算的MATLAB例程,论文复现,附参考文献。GDOP:几何精度因子&CRLB:克拉美罗下界
开发语言·matlab·tdoa·crlb·gdop