webdn
 
  首页     免费截图     VIP会员区     广告Banner     技术文档     网站模板  
网站截图,网站每日新 !
虚拟主机
网页模板

首页 >> WebDN 文档 >> 网络编程 >> ASP.net 技术资料 >> Page 21 >> 在多线程里查询数据库并填充dataGrid

 

在多线程里查询数据库并填充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;
}



电话咨询:010-60520722 QQ咨询:3792656   |   583696287   |   66733350 关于WebDN  |  站点地图  |  联系我们  |  支付方式  |  友情链接
© 2004-2008 WebDN.com 版权所有. 沪ICP备05040479号