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

 }
相关推荐
guygg883 小时前
两轮车MATLAB仿真程序的实现方法
开发语言·matlab
yugi9878383 小时前
异构网络下信道环境建模方法及应用
开发语言·网络
小北方城市网3 小时前
第 11 课:Python 全栈项目进阶与职业发展指南|从项目到职场的无缝衔接(课程终章・进阶篇)
大数据·开发语言·人工智能·python·数据库架构·geo
Thetimezipsby3 小时前
Go(GoLang)语言基础、知识速查
开发语言·后端·golang
以太浮标4 小时前
华为eNSP模拟器综合实验之-BGP路由协议的配置解析
服务器·开发语言·php
宠..4 小时前
优化文件结构
java·服务器·开发语言·前端·c++·qt
源码梦想家4 小时前
多语言高性能异步任务队列与实时监控实践:Python、Java、Go、C++实战解析
开发语言·python
百***78754 小时前
Gemini 3.0 Pro与2.5深度对比:技术升级与开发实战指南
开发语言·python·gpt
wjs20245 小时前
C# 命名空间(Namespace)
开发语言
CoderIsArt5 小时前
基于iSCSI的光存储软件架构设计 (Windows + Qt版本)
开发语言·windows·qt