zoukankan      html  css  js  c++  java
  • 实现DataGridView实时更新数据

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;

    namespace WinMilkProject.Project
    {

        public partial class Form1 : Form
        {
            Thread myThread;

            public int frequency = 0;//更新时间频率
            public static bool isUse = false;//是否停止更新
            public static string statusInfo = string.Empty;//状态
            private delegate void myDelegate(DataTable dt);//定义委托
            public Form1()
            {
                InitializeComponent();
                label2.Text = "更新频率为:" + (trackBar1.Value / 1000).ToString() + "";
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                myThread = new Thread(startFillDv);//实例化线程
                myThread.Start();

            }

            private void startFillDv()
            {
                while (true)
                {
                    if (isUse)
                    {
                        statusInfo = "正在实时更新数据......";      
                        DataTable dt = CommonEx.GetDataTableEx("select * from table1");//自己写的数据封装类 能够返回一个datatable
                        Grid(dt);
                        Thread.Sleep(frequency);
                    }
                    else
                    {
                        statusInfo = "停止更新!";
                    }
                }

            }

            private void Grid(DataTable dt)
            {
                if (this.InvokeRequired)
                {
                    this.Invoke(new myDelegate(Grid), new object[] { dt });
                }
                else
                {
                    try
                    {
                        this.dataGridView1.DataSource = null;
                        this.dataGridView1.DataSource = dt;
                        dt = null;
                        statusInfo = "更新完成!";
                    }
                    catch 
                    {
                        
                    }
                }

            }

            private void Form1_FormClosed(object sender, FormClosedEventArgs e)
            {
                if (this.myThread.IsAlive)
                {
                    this.myThread.Abort();//结束线程
                }
            }

            private void timer1_Tick(object sender, EventArgs e)
            {
                label1.Text = statusInfo;
                frequency = trackBar1.Value;
                if (statusInfo.Trim() == "正在实时更新数据......")
                {
                    pictureBox1.Visible = true;
                }
                else
                {
                    pictureBox1.Visible = false;
                }

            }

            private void checkBox1_CheckedChanged(object sender, EventArgs e)
            {
                if (checkBox1.Checked)
                {
                    isUse = true;
                }
                else
                {
                    isUse = false;
                }

            }

            private void trackBar1_Scroll(object sender, EventArgs e)
            {
                label2.Text = "更新频率为:" + (trackBar1.Value / 1000).ToString() + "";
            }

        }
    }

  • 相关阅读:
    归并两路有序链表
    [转]两种高性能I/O设计模式(Reactor/Proactor)的比较
    linux 静态库使用经验
    系统性能调优经验
    编译-O 选项对性能提升作用
    [转]Linux shell中的那些小把戏
    shell函数传递带空格的参数
    标题清洗引发的算法(两个字符串的最长公共子串)
    正则表达式之Matcher类中group方法
    ConcurrentHashMap JDK 1.6 源码分析
  • 原文地址:https://www.cnblogs.com/ArRan/p/3333517.html
Copyright © 2011-2022 走看看