怎么做可以设置每隔10秒从数据库中取得数据,在datagridview中显示呢?

解决方案 »

  1.   

    设定Timer咯, 每10秒读一遍Bind()
      

  2.   

    WEB下边调用DataBind()
    WIN下边自己写Bind()
      

  3.   

    设置缓存Response.Cache.SetExpires(DateTime.Now.AddSecond(10));
      

  4.   

    哎,,,winform的,,,各位兄弟有没有搞过哦?????
      

  5.   

    拖一个timer控件,Interval属性设为10000,enabled属性设为true
    在tick事件里写读取数据的代码即可
      

  6.   

    Timer 再在Timer_Click事件中清除数据,显示数据
      

  7.   

    用线程和Timer均可以实现...每隔10s从数据库中取出取一下数据,我后绑定到DataGridView中即可..个人比较倾向于线程...
      

  8.   

    用线程写了一个:using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    using System.Threading ;
    namespace Test
    {
        public partial class Form1 : Form
        {
            //定义一个变量,用于关闭线程
            private bool flag;
            //定义一个线程
            private Thread thread;        public Form1()
            {
                InitializeComponent();
                flag = true;
                thread = new Thread(new ThreadStart(threadProc));
                thread.Start();
                
            }
            //线程回调函数
            private void threadProc()
            {
                while (flag)
                {
                    //三秒种一次
                    DataBind();
                    Thread.Sleep(3000);
                }
            }
            //从数据库中取出数据,并绑定
            private void DataBind()
            {
                SqlConnection con = new SqlConnection("server=.;database=student;uid=sa;pwd=0421");
                try
                {
                    con.Open();
                    SqlDataAdapter sda = new SqlDataAdapter("select * from studentInfor", con);
                    DataSet ds = new DataSet();
                    sda.Fill(ds, "student");
                    this.dataGridView1.DataSource = ds.Tables["student"];
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    con.Close();
                }
            }        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                //关闭前先关闭线程
                flag = false;
                thread.Join();
            }        private void button1_Click(object sender, EventArgs e)
            {
                //测试,添加一条数据,看隔一段时间后,能否取上来..
                SqlConnection con = new SqlConnection("server=.;database=student;uid=sa;pwd=0421");
                try
                {
                    con.Open();
                    SqlCommand cmd = new SqlCommand("insert into studentInfor values('1111111','test')", con);
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    con.Close();
                }
            }
        }
    }
      

  9.   

    再用Timer写一个:using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    using System.Threading ;
    namespace Test
    {
        public partial class Form1 : Form
        {        public Form1()
            {
                InitializeComponent();
                //设置间隔,启动Timer
                this.timer1.Interval = 3000;
                this.timer1.Enabled = true;
                
            }        //从数据库中取出数据,并绑定
            private void DataBind()
            {
                SqlConnection con = new SqlConnection("server=.;database=student;uid=sa;pwd=0421");
                try
                {
                    con.Open();
                    SqlDataAdapter sda = new SqlDataAdapter("select * from studentInfor", con);
                    DataSet ds = new DataSet();
                    sda.Fill(ds, "student");
                    this.dataGridView1.DataSource = ds.Tables["student"];
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    con.Close();
                }
            }        
            private void button1_Click(object sender, EventArgs e)
            {
                //测试,添加一条数据,看隔一段时间后,能否取上来..
                SqlConnection con = new SqlConnection("server=.;database=student;uid=sa;pwd=0421");
                try
                {
                    con.Open();
                    SqlCommand cmd = new SqlCommand("insert into studentInfor values('1111111','test')", con);
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    con.Close();
                }
            }        private void timer1_Tick(object sender, EventArgs e)
            {
                //每隔三秒,响应一次
                DataBind();
            }
        }
    }
      

  10.   

    liujia_0421(SnowLover):
     你好,
        测试那个线程的方法出现这样的错误:
            线程间操作无效: 从不是创建控件“dataGridView1”的线程访问它。
      

  11.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Xml;
    using System.Threading;
    using System.Data.SqlClient;namespace TestForm
    {
        public partial class Form1 : Form
        {
            //定义一个变量,用于关闭线程
            private bool flag;
            //定义一个线程
            private Thread thread;        //定义一个委托
            public delegate void MyInvoke(DataSet ds);        public Form1()
            {
                InitializeComponent();
                flag = true;
                thread = new Thread(new ThreadStart(threadProc));
                thread.Start();
            }        //线程回调函数
            private void threadProc()
            {
                while (flag)
                {
                    //三秒种一次
                    DataBind();           
                    Thread.Sleep(3000);
                }
            }
            //操作DataGridView
            private void BindDataGridView(DataSet ds)
            {
                this.dataGridView1.DataSource = ds.Tables["student"];
            }
            //从数据库中取出数据,并绑定
            private void DataBind()
            {
                SqlConnection con = new SqlConnection("server=.;database=student;uid=sa;pwd=0421");
                try
                {
                    con.Open();
                    SqlDataAdapter sda = new SqlDataAdapter("select * from studentInfor", con);
                    DataSet ds = new DataSet();
                    sda.Fill(ds, "student");
                    //this.dataGridView1.DataSource = ds.Tables["student"];
                    //绑定数据到DataGridView
                    MyInvoke mi = new MyInvoke(BindDataGridView);
                    this.BeginInvoke(mi, new object[] { ds });
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    con.Close();
                }
            }        private void button1_Click(object sender, EventArgs e)
            {
                //测试,添加一条数据,看隔一段时间后,能否取上来..
                SqlConnection con = new SqlConnection("server=.;database=student;uid=sa;pwd=0421");
                try
                {
                    con.Open();
                    SqlCommand cmd = new SqlCommand("insert into studentInforvalues('1111111','test')", con);
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    con.Close();
                }
            }        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                //关闭前先关闭线程
                flag = false;
                thread.Join();
            }
        }
    }
      

  12.   

    TO:测试那个线程的方法出现这样的错误:
            线程间操作无效: 从不是创建控件“dataGridView1”的线程访问它。不好意思,开始没想这么多,确实不能在线程中操作控件的,但有时测试是可以通过的,虽然测试通过了,但没有检查...现在改过了,利用委托,与前面的代码,改的地方有三:1.//定义一个委托
            public delegate void MyInvoke(DataSet ds);
    2.写了一个专门操作DataGridView的函数
    //操作DataGridView
            private void BindDataGridView(DataSet ds)
            {
                this.dataGridView1.DataSource = ds.Tables["student"];
            }
    3.在DataBind函数中将操作DataGridView的代码改用委托来实现:
    //***********注意这句被注释起来了**********************//
    //this.dataGridView1.DataSource = ds.Tables["student"];
    //******************************************************//                //绑定数据到DataGridView
                    MyInvoke mi = new MyInvoke(BindDataGridView);
                    this.BeginInvoke(mi, new object[] { ds });
    详细代码见上所示,已测试通过...