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

时间:2009-02-19 20:23:34

标签: c# asp.net-2.0

我正在试图找出ASP.NET的GridView分页机制,因此我可以使用框架的本机功能,而不是我公司的自制手动分页例程,这需要花费大量的工作来实现。

除了如何让GridView的PageCount属性与我们的Web服务一起使用之外,我已经找到了所有内容。目前,我们的Web服务返回总记录数,如下所示:

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

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

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

2 个答案:

答案 0 :(得分:8)

我强烈建议你去ObjectDataSource路线。

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

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

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

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

我强烈建议您查看The Code Project's Example of using ObjectDataSource and GridView,因为这显然是支持您想要的方式。

祝你好运!

答案 1 :(得分:7)

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

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

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

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