我有一个问题,我在同一页面上有 2 个 DataPager,链接到同一个 ListView。一切正常,除了“底部”或第二个寻呼机似乎不起作用。页码已生成,但单击它们不会执行任何操作。如果我将“底部”寻呼机复制到“顶部”寻呼机上方,那么该寻呼机将起作用,但它下方的寻呼机不起作用。似乎只有首先出现的寻呼机似乎有效:
<asp:DataPager ID="dpPagerTop" runat="server" PagedControlID="lvOutput" QueryStringField="pageNumber">
<Fields>
<asp:NumericPagerField NextPageText="Next" PreviousPageText="Previous" />
</Fields>
</asp:DataPager>
<asp:DataPager ID="dpPagerBottom" runat="server" PagedControlID="lvOutput" QueryStringField="pageNumber">
<Fields>
<asp:NumericPagerField NextPageText="Next" PreviousPageText="Previous" />
</Fields>
</asp:DataPager>
<asp:ListView ID="lvOutput" runat="server" OnPagePropertiesChanged="lvOutput_PagePropertiesChanged">
<LayoutTemplate>
<asp:PlaceHolder id="itemPlaceholder" runat="server" />
</LayoutTemplate>
<ItemTemplate>
<a href="<%# Eval("Link") %>" title="<%# Eval("Title") %>"><%# Eval("Title") %></a>
</ItemTemplate>
</asp:ListView>
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
dpPagerTop.SetPageProperties(Request.QueryString["pageNumber"].ToString(), 25, false);
dpPagerBottom.SetPageProperties(Request.QueryString["pageNumber"].ToString(), 25, false);
lvOutput.DataSource = [datasource];
lvOutput.DataBind();
}
}
protected void lvOutput_PagePropertiesChanged(object sender, EventArgs e)
{
lvOutput.DataBind();
}
更新:
在又玩弄了一些之后,我确定如果 SetPageProperties 具有正确的参数,两个寻呼机都可以工作。第一个参数应该是开始结果的数量,第二个应该是要显示的结果数量。但是,我得到了错误的数字来显示。我正好有 100 条记录,我想每页显示 25 个结果。如果我硬编码:
dpPagerTop.SetPageProperties(25, 25, true);
dpPagerBottom.SetPageProperties(25, 25, true);
这应该是结果的第二页,结果显示26-50。但是,底部寻呼机不起作用。
现在,如果我硬编码:
dpPagerTop.SetPageProperties(26, 25, true);
dpPagerBottom.SetPageProperties(26, 25, true);
两个寻呼机都正常工作,但结果数从27-51 开始。
任何人都可以重新创建这个,它让我发疯?!?!?
更新 2:
我想我可以通过在绑定到 ListView 之前设置页面属性来实现它。