当数据源未返回完整结果集时,手动设置GridView的PageCount?

11

我正试图弄清楚ASP.NET的GridView分页机制,以便我可以使用框架的原生功能,而不是我们公司自己编写的手动分页例程,这需要很多工作才能实现。

除了如何让GridViewPageCount属性与我们的Web服务配合使用之外,我已经弄清楚了一切。目前,我们的Web服务返回类似于以下内容的总记录数:

public object[] GetStuffMethod(int pageNum, int recordsPerPage, out int totalRecords)

这在使用GridView时很好用,但我找到的文档说GridViewPageCount属性是基于数据源中的总记录数生成的。除了返回所有记录之外,是否真的没有其他方法可以根据其他内容设置PageCount呢?

我的数据源中可能有成千上万条记录,所以我不想选择所有记录只为使GridView的分页计数工作。我可能可以忽略GridView的分页计数并自己计算它,但如果该框架有一种方法可以做到这一点,我宁愿使用它。

2个回答

8
您需要设置AllowCustomPaging="true"。当进行数据绑定时,请执行以下操作:
mygrid.VirtualItemCount = totalRecords;
mygrid.DataSource = mysource;
mygrid.DataBind();

更新1:以上内容仅适用于数据表格。不幸的是,使用GridView进行服务器端分页的唯一支持方式是实现对象数据源或自定义数据源。这是相关的MSDN文档:http://msdn.microsoft.com/en-us/library/5aw1xfh3.aspx

更新2:从.Net 4.5开始,此方法现在也适用于GridView。


1
VirtualItemCount 只适用于 DataGrid 控件。在 GridView 上,该属性不存在,否则我会使用它的。 - Dan Herbert
1
@Dan,你说得对,我添加了一个关于它的更新 - 基本上你被迫选择objectdatasource或自定义数据源。我添加了一个链接到msdn文档。 - eglasius
3
根据.Net 4.5的MSDN文档,这个属性似乎存在于GridView中。 - sparebytes

8
我强烈推荐您使用ObjectDataSource方法。
如果您对这种方法不熟悉,下面是基本步骤:
1) 您需要在页面上添加一个额外的元素,而不是在代码后端手动设置grid.DataSource属性。将grid的DataSourceID设置为您的ObjectDataSource的id。
2) 这是您真正控制的地方。您需要创建一个新类并赋予它两个函数“SelectRows()”和“GetCount()”。您可以在这两个函数中放置逻辑并进行优化。如果需要与web服务一起工作,请随意使用。但是,在此方法下,您可以调用一个函数返回行数并调用另一个函数返回计数。
3) 使用ObjectDataSource的属性编辑器将其连接到您的类并启用分页。这样就完成了!
我强烈建议您查看代码项目网站使用ObjectDataSource和GridView的示例,因为这显然是支持您想要的内容的预期方法。
祝你好运!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接