在多线程里查询数据库并填充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()
  {
   this.dataGridDJ.DataSource=dt.DefaultView;
  }
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值