DataGridView分次加载数据

例如,有上千条记录,如果一次性加载,势必会影响效率,分页读取似乎能解决问题,但是在DataGridView中加上分页按钮也比较麻烦。此前,使用过Oracle Form,一次会显示一些数据,而当数据比较多时,可以通过滚动条继续加载数据,我觉得这种实现方式比较好。

1、首先找到DataGridView的滚动条事件

这个比较好找,dataGridViewX1_Scroll(object sender, ScrollEventArgs e)

2、获得DataGridView当前显示数据中的最后一行的行号

this.dataGridViewX1.Rows.GetLastRow(DataGridViewElementStates.Displayed);

3、定义变量

private int tc;//记录总数
private int pageSize;//每次读取记录数
private int pageNo;//分页号

4、第一次仅装载pageSize条记录,并给tc赋值

loadData();

5、此后当滚动到最后一条记录并且还存在未加载记录时,再次加载记录

int lastRowNum = this.dataGridViewX1.Rows.GetLastRow(DataGridViewElementStates.Displayed);
if (lastRowNum > (pageNo * pageSize - 5) && lastRowNum < tc)

loadOtherData();

6、往dataSet中追加记录

DataTable dt = new DataTable("Vendor");

adapter.Fill(dt);
//继续加载记录
foreach (DataRow row in dt.Rows)
{
       dataSet1.Tables["Vendor"].ImportRow(row);
}

7、Sql Server 2005中分页

select top 100 * from (
select ROW_NUMBER() OVER (ORDER BY tb.cCusCode ASC) as ROWID,tb.cCusCode,tb.cCusName,tb.cCusAbbName,tb.cCusAddress,tb.cCusAccount,tb.cCusBank,tb.dCusDevDate
from Customer tb) aa
where (aa.ROWID >
(select isnull(max(ta.ROWID),0)
from (select top 100 ROW_NUMBER() OVER (ORDER BY tc.cCusCode ASC) AS ROWID,tc.cCusCode from Customer tc where 1=1  order by tc.cCusCode) ta))  
order by aa.cCusCode

这里,由于cCusCode是字符型的,如果是自增的id,就不必这么麻烦通过ROW_NUMBER() OVER (ORDER BY tb.cCusCode ASC)获得行RowId了。

综上所述,结合分页和Scroll事件,可以实现分次加载数据。

当滚动条移动到第195条记录时,会自动加载下一个pageSize的记录



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值