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


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

我已经弄清楚了除了如何得到的一切 GridView使用我们的Web服务的PageCount属性。目前,我们的Web服务返回总记录数,如下所示:

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

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

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


1250
2018-02-19 20:23


起源

你试过答案吗? - eglasius


答案:


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

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

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

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

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

我强烈建议你退房 Code Project的使用ObjectDataSource和GridView的示例 因为这显然是支持你想要的东西的预期方式。

祝你好运!


8
2018-02-19 20:35





您必须设置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


6
2018-02-19 20:29



VirtualItemCount仅适用于DataGrid控件。在GridView上,此属性不存在,否则我将使用它。 - Dan Herbert
@Dan你是对的,我添加了一个关于它的更新 - 基本上你被迫使用objectdatasource或自定义数据源。添加了msdn doc的链接。 - eglasius
从.Net 4.5开始,此属性似乎存在于GridView上 MSDN - sparebytes