• 在多线程里查询数据库并填充dataGrid


    在查询大数据量时,窗体界面会不动,“正在查询...”的提示也不能显示。所以打算用多线程来实现, 可是当在线程里面执行到 this.dataGridDF.DataSource=dt.DefaultView;填充数据 时却提示报错,说什么该线程不能调用主线程创建的控件等等。 后来查了许多资料,终于搞定。可以在查询数据库时操作别的了,“正在查询...”的提示也显示了。

     
    //或者在前面用一个线程查询,在线程里调用dataGrid.BeginInvoke(异步方法)来单独填充
     
      public delegate void myDelegate();   DataTable dt;
     
      private void btnDianJia_Click(object sender, System.EventArgs e)   {    try    {     mythread = new Thread(new ThreadStart(ThreadWork));     mythread.Start();        }    catch(System.Exception ex)    {     MessageBox.Show(this,ex.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);    }      }     void ThreadWork()   {    this.dataGridDJ.CaptionText="正在查询电价数据...";    mf.statusBarPanel1.Text="正在查询电价数据...";    this.Cursor=Cursors.WaitCursor;
     
       string shijian=this.dateTimeDianJia.DateValue;    DateTime today=DateTime.Today;    string mingcheng=this.txtMingCheng.Text;    string leibie=this.cmbBoxLiebie_DJ.SelectedValue.ToString();    PowerWeb.BLL.DianFeiDianJia.DianJia dj=new PowerWeb.BLL.DianFeiDianJia.DianJia();
     
       if(shijian==today.ToString("yyyyMM"))    {     dt=dj.GetList(leibie,mingcheng).Tables[0];    }    else    {     dt=dj.GetListOld(leibie,mingcheng,shijian).Tables[0];    }    this.dataGridDJ.CaptionText=shijian+"电价信息 (共计条"+dt.Rows.Count.ToString()+"记录)";
     
       dataGridDJ.BeginInvoke(new myDelegate(FillData));//异步调用(来填充)        this.Cursor=Cursors.Default;    mf.statusBarPanel1.Text="查询结束";   }      private void FillData()   {
  • 相关阅读:
    P1182 数列分段`Section II` 二分
    洛谷 P1025 数的划分
    深浅拷贝
    数据的内置方法
    控制流程-if/while/for
    python的基本运算符
    花式赋值
    python的注释
    Python的垃圾回收机制
    变量与常量
  • 原文地址:https://www.cnblogs.com/youlechang123/p/2369309.html
Copyright © 2020-2023  润新知