繁体   English   中英

使用C#Windows窗体中SQL查询的大量结果填充dataGridView

[英]Populate dataGridView with a large set of results from SQL query in C# Windows Forms

我有一个使用dataGridView创建的Windows窗体 我还有一个长时间运行的SQL查询,我在BackgroundWorker线程中运行以填充静态数据表。

private void RunQuery_DoWork(object sender, DoWorkEventArgs e)
{
    OdbcDataAdapter adapter = new OdbcDataAdapter(longRunningSQLQuery, datasourcename);
    adapter.Fill(results);
}

private void RunQuery_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    dataGridView1.DataSource = results;
}

这完全没问题。 当我去运行查询时,UI保持响应,因为结果是在后台生成的...但是,当我需要在dataGridView中显示结果时,如果它是一大组数据,则窗口会冻结。 如果我让它静置一段时间,最终它会完成。 在我的RunWorkerCompleted回调函数中,我调用dataGridView1.DataSource = results; (结果是我的DataSet),这是需要很长时间的部分。

有什么方法可以预绑定dataGridView,或者在后台工作器中绑定它?

如果使用数据网格的虚拟模式,则仅加载显示的行。 否则,将加载所有行。

http://msdn.microsoft.com/en-us/library/2b177d6d.aspx

它将使用反射将值拉出数据源。 更快的方法可能是自己构建和添加行。 您可能能够在后台线程中构建行列表,然后在主UI线程上将它们添加为范围 - 不确定。

显然,这样做会失去数据绑定的好处,但如果要加载大量数据, 这可能是唯一的选择 事实证明,您可以使用VirtualMode,您自己实现部件,但保持数据绑定的好处。

由于GridView是一个可视组件,我认为该规则适用,您只能从创建这些控件的前台线程中调用方法和属性。

也许你可以逐步填充网格,每次迭代添加每个例如10​​0条记录,使控制响应更加顺畅。

Microsoft SQL Server Management Studio似乎也使用了GridView,处理大行也相当不错。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM