我有一个带有DataPager的ListView。 ListView绑定到代码隐藏中的DataTable。
所以,假设我将寻呼机设置为显示10个页面链接,并且我有超过10页的数据。这11个按钮(10页加上指向第11页的溢出椭圆)工作得很好。 Next和Previous链接也可以正常工作。
但是,一旦我点击省略号并转到第11页,链接仍指向第一页页面的偏移量。也就是说,点击第12页将在第3页转储我(第1页是新页面的10个省略号,第2页是第11页)。与Next和Previous链接以及所有其他数字链接相同。
查看浏览器控制台中的代码,看起来甚至(其他人的)Pagers工作在链接'__doPostBack调用中为每页页面打印相同的参数。所以,我不确定寻呼机是如何保留其整体偏移的,因为每页的页面只是相对于它们的偏移量。
除了将我的ListView绑定到代码隐藏中的DataTable而不是DataSourceID属性中的数据源之外,我真的不知道我在做什么与其他人不同。但是,传呼机确实为页面的第一页正确分页,所以我认为这不仅仅是我的约束,而是将其抛弃了。
<asp:ListView ID="lvProjects" runat="server" GroupPlaceholderID="groupPlaceHolder"
ItemPlaceholderID="itemPlaceHolder" OnPagePropertiesChanging="OnPagePropertiesChanging"
DataKeyNames="ProjectID" OnPreRender="lvProjects_PreRender">
<LayoutTemplate>
<asp:DataPager ID="DataPager" runat="server" PagedControlID="lvProjects" PageSize="10">
<Fields>
<asp:NextPreviousPagerField ButtonType="Link" ShowFirstPageButton="true" ShowPreviousPageButton="true" ShowNextPageButton="false"
FirstPageText="|<<" PreviousPageText="<" RenderNonBreakingSpacesBetweenControls="true" />
<asp:NumericPagerField ButtonType="Link" ButtonCount="10" RenderNonBreakingSpacesBetweenControls="true" />
<asp:NextPreviousPagerField ButtonType="Link" ShowNextPageButton="true" ShowLastPageButton="true" ShowPreviousPageButton="false"
NextPageText=">" LastPageText=">>|" RenderNonBreakingSpacesBetweenControls="true" />
</Fields>
</asp:DataPager>
<br />
<br />
<table class="myGrid projects-table">
<tbody>
<asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
</tbody>
</table>
</LayoutTemplate>
<ItemTemplate>
...
</ItemTemplate>
</asp:ListView>
protected void OnPagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
{
var pager = (DataPager)lvProjects.FindControl("DataPager");
pager.SetPageProperties(e.StartRowIndex, e.MaximumRows, false);
lvProjects.DataSource = Projects;
lvProjects.DataBind();
}
查看e.StartRowIndex还将显示页面首页的较高页面的偏移量(即第12页将返回“20”,@ 10项/页)。
答案 0 :(得分:0)
这显然是由于使用SessionPageStatePersister重写PageStatePersister,因为:
width
我猜测DataPager将其整体偏移量存储在页面状态中,当我改变页面状态的行为时,它会以某种方式丢失。
删除覆盖允许它按预期工作。