当DataSource没有返回完整的结果集时,手动设置GridView的PageCount?

我正在试图弄清楚ASP.NET的GridView分页机制,所以我可以使用框架的本机function,而不是我公司的自制手动分页例程,这需要大量的工作来实现。

除了如何让GridView的PageCount属性与我们的Web服务一起工作之外,我已经弄明白了。 目前,我们的Web服务返回总记录数,如下所示:

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

这适用于GridView,但是我发现的文档说GrideViewPageCount属性是从DataSource中的总记录生成的。 除了返回所有记录之外,真的没有办法根据其他内容设置PageCount吗?

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

我强烈建议您使用ObjectDataSource路由。

如果您不熟悉这种方法,这里有基础知识:

1)而不是在后面的代码中手动设置grid.DataSource属性,而是向页面添加一个额外的元素。 您将网格的DataSourceID设置为ObjectDataSource的id。

2)这是你获得真正控制的地方。 您创建一个新类并为其提供两个函数“SelectRows()”和“GetCount()”。 您可以将逻辑放在两个函数中,并根据您的内容进行优化。 如果您需要使用Web服务,请随意使用Web服务,但在此方法下,您可以调用一个返回行,另一个返回计数。

3)使用ObjectDataSource的属性编辑器将其连接到您的类并启用分页。 你们都准备好了!

我强烈建议您查看代码项目的使用ObjectDataSource和GridView的示例,因为这显然是支持您想要的方式。

祝好运!

您必须设置AllowCustomPaging =“true”。 当数据绑定时:

 mygrid.VirtualItemCount = totalRecords; mygrid.DataSource = mysource; mygrid.DataBind(); 

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

更新2:此方法现在适用于.Net 4.5的GridView