我试图弄清楚ASP.NET的GridView
分页机制,所以我可以使用框架的本机功能,而不是我公司的自制手动分页例程,这需要大量的工作来实现.
除了如何让GridView
我们的PageCount属性与我们的Web服务一起工作之外,我已经找到了所有的东西.目前,我们的Web服务返回总记录数,如下所示:
public object[] GetStuffMethod(int pageNum, int recordsPerPage, out int totalRecords)
这正常工作与一个GridView,但是我发现文档说GrideView
的PageCount
属性从数据源的总记录而产生.除了返回所有记录之外,真的没有办法根据其他内容设置PageCount吗?
我的数据源中可能有成千上万条记录,所以我宁愿不选择所有这些记录只是为了使GridView的页面计数工作.我可能只是忽略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
我强烈建议您使用ObjectDataSource路由.
如果你不熟悉这种方法,这里有基础知识:
1)而不是在后面的代码中手动设置grid.DataSource属性,而是向页面添加一个额外的元素.您将网格的DataSourceID设置为ObjectDataSource的id.
2)这是你获得真正控制的地方.您创建一个新类并为其提供两个函数"SelectRows()"和"GetCount()".您可以将逻辑放在两个函数中,并根据您的内容进行优化.如果您需要使用Web服务,请随意使用Web服务,但在此方法下,您可以调用一个返回行,另一个返回计数.
3)使用ObjectDataSource的属性编辑器将其连接到您的类并启用分页.你们都准备好了!
我强烈建议您查看代码项目的使用ObjectDataSource和GridView的示例,因为这显然是支持您想要的方式.
祝好运!