2009-02-19 24 views
11

我想弄清楚ASP.NET的GridView分页机制,所以我可以使用框架的本地功能,而不是我公司的自制酿造手动分页例程,这需要大量的工作来实现。DataSource未返回完整结果集时手动设置GridView的PageCount?

我已经想出了一切,除了GridView的PageCount属性如何与我们的Web服务一起使用。目前,我们的网络服务来回报总记录数如下所示:

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

这正常工作与一个GridView,但是我发现文档说GrideViewPageCount属性从总记录而产生数据源。除了返回所有记录之外,是否真的没有办法设置基于其他内容的PageCount?

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

+0

你试过答案了吗? – eglasius 2009-03-10 18:04:59

回答

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,因为这显然是支持您想要的目标方式。

祝你好运!

5

你必须设置AllowCustomPaging =“true”。和数据绑定做的时候:

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

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

更新2:这种方法现在的GridView可以作为.NET 4.5

+1

VirtualItemCount仅适用于DataGrid控件。在GridView上,该属性不存在,否则我会使用它。 – 2009-03-10 19:02:55

相关问题