社区
C#
帖子详情
关于datagridview加载数据的问题
yhl2133156
2011-08-04 11:23:38
datagridview加载显示数据的时候,如果数据量很大,怎么实现异步加载,并且在后台加载显示数据时,把任务进度显示在progressbar上
...全文
137
6
打赏
收藏
关于datagridview加载数据的问题
datagridview加载显示数据的时候,如果数据量很大,怎么实现异步加载,并且在后台加载显示数据时,把任务进度显示在progressbar上
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sdl2005lyx
2011-08-04
打赏
举报
回复
问题的本质:是数据太大,太多,从数据库读取出来要消耗很多时间,用哪个线程,这个时间都少不了!
yhl2133156
2011-08-04
打赏
举报
回复
[Quote=引用 3 楼 sdl2005lyx 的回复:]
用代码实现分页:
private int pageSize = 0; //每页显示行数
private int pageCurrent = 0; //当前页号
private int pageCount = 0; //页数=总记录数/每页显示行数
private int nCurrent = 0; //当前记录行号
private int nMax = 0; //……
[/Quote]
我新建了一个线程去执行,一些Dataset的整理工作,由于在datagridview数据加载过程是ui线程在控制,难道就不能用另一个线程去操作吗?
如果不能就只能分页了。
yhl2133156
2011-08-04
打赏
举报
回复
[Quote=引用 2 楼 wangyue4 的回复:]
http://www.huanghengxu.com/Html/Article/57.htm
用BackgroundWorker
[/Quote]
我新建了一个线程去执行,一些Dataset的整理工作,由于在datagridview数据加载过程是ui线程在控制,难道就不能用另一个线程去操作吗?
如果不能就只能分页了。
sdl2005lyx
2011-08-04
打赏
举报
回复
用代码实现分页:
private int pageSize = 0; //每页显示行数
private int pageCurrent = 0; //当前页号
private int pageCount = 0; //页数=总记录数/每页显示行数
private int nCurrent = 0; //当前记录行号
private int nMax = 0; //总记录数
private DataTable srcTable = null; //元数据
private void InitPageSet()
{
pageSize = 30; //设置页面行数
nMax = srcTable.Rows.Count;
pageCount = (nMax / pageSize); //计算出总页数
if ((nMax % pageSize) > 0)
{
pageCount++;
}
pageCurrent = 1; //当前页数从1开始
nCurrent = 0; //当前记录数从0开始
First.Enabled =false;
Prev.Enabled = false;
bool b = pageCurrent == pageCount ? false : true;
Next.Enabled = b;
End.Enabled = b;
}
private DataTable LoadPageData()
{
int nStartPos = 0; //当前页面开始记录行
int nEndPos = 0; //当前页面结束记录行
DataTable dtTemp = null;
if (srcTable == null || srcTable.Rows.Count == 0)
return srcTable;
try
{
dtTemp = srcTable.Clone(); //克隆DataTable结构框架
if (pageCurrent == pageCount)
{
nEndPos = nMax;
}
else
{
nEndPos = pageSize * pageCurrent;
}
nStartPos = nCurrent;
//从元数据源复制记录行
for (int i = nStartPos; i < nEndPos; i++)
{
dtTemp.ImportRow(srcTable.Rows[i]);
nCurrent++;
}
textEdit1.Text = pageCurrent.ToString();
Page.Text = string.Format("/{0}页", pageCount);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + "LoadPageData");
}
return dtTemp;
}
private void First_Click(object sender, EventArgs e)
{
try
{
pageCurrent = 1; //当前页数从1开始
nCurrent = 0; //当前记录数从0开始
if (srcTable == null || srcTable.Rows.Count == 0)
return;
DataTable table = LoadPageData();
ChangeDataSoure(table);
First.Enabled =false;
Prev.Enabled = false;
Next.Enabled = true;
End.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void Prev_Click(object sender, EventArgs e)
{
try
{
pageCurrent--;
nCurrent = pageSize * (pageCurrent - 1);
if (srcTable == null || srcTable.Rows.Count == 0)
return;
DataTable table = LoadPageData();
ChangeDataSoure(table);
bool b= pageCurrent <= 1 ? false:true;
First.Enabled = b;
Prev.Enabled = b;
Next.Enabled = true;
End.Enabled = true;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void Next_Click(object sender, EventArgs e)
{
try
{
pageCurrent++;
nCurrent = pageSize * (pageCurrent - 1);
if (srcTable == null || srcTable.Rows.Count == 0)
return;
DataTable table=LoadPageData();
ChangeDataSoure(table);
bool b= pageCurrent >= pageCount ? false : true;
Next.Enabled = b;
End.Enabled = b;
First.Enabled = true;
Prev.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void End_Click(object sender, EventArgs e)
{
try
{
pageCurrent = pageCount;
nCurrent = pageSize * (pageCurrent - 1);
if (srcTable == null || srcTable.Rows.Count == 0)
return;
DataTable table = LoadPageData();
ChangeDataSoure(table);
Next.Enabled =false;
End.Enabled = false;
First.Enabled = true;
Prev.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
wangyue4
2011-08-04
打赏
举报
回复
http://www.huanghengxu.com/Html/Article/57.htm
用BackgroundWorker
kid_wang
2011-08-04
打赏
举报
回复
数据库里存储过程分页去吧。
c#datagrid操作,解决
datagridView
加载
慢.docx
发现了
datagridview
直接绑定DataSource
加载
数据
比较慢的
问题
,从网上找了很多资料,没有有效的解决方案,
.net中
DataGridView
异步
加载
大批量
数据
多线程异步
加载
大批量
数据
到
Datagridview
中,没次
加载
1000条
数据
。 引用DLL,调用方法: string sql = "select top {0} * from {2} where FItemID not in (select top {1} FItemID from {2})"; string tbName = ...
DataGridView
设置列头,动态
加载
数据
源,动态改变颜色
在ASP.Net中
DataGridView
...在ASP.Net中应用
DataGridView
动态绑定
数据
源 设置
DataGridView
行的颜色,鼠标移动改变
数据
行颜色。 很经典的
DataGridView
使用源码实例。 方法写的很简单,很容易理解,初学者也能快速使用。
C#
datagridview
动态
加载
动态
加载
gridview里面的列. //动态生GridView protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e) { switch (e.Row.RowType) { //判断是否表头 case DataControlRowType.Header: /...
Winform
DataGridView
中利用WebClient异步
加载
显示网络地址的图片
支持显示图片的一种列类型(Column Type),叫
DataGridView
ImageColumn ,显示图片就是用这种列,但是这种列不支持网络地址,要显示网络上的图片,必须下载到本地,由于一个
datagridview
中显示的
数据
量可能比较大,...
C#
110,532
社区成员
642,574
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章