0

我有一个包含 2 个数据分页器和 1 个列表视图的页面。我正在尝试以编程方式设置页面大小,它适用于第一页,但之后就不行了。如果我将页面大小硬编码为 12,它可以正常工作。

数据分页器使用“页面”的查询字符串参数。我还将会话“PerPage”设置为 int 值,例如 12、24、48 等,以控制每页显示的数量,但这也不起作用。不执行回发,因为这一切都是通过 ?page=3 查询字符串参数完成的。

提前致谢!

这是我的代码:

<asp:DataPager ID="DPTop" runat="server" QueryStringField="page" PagedControlID="resultsLV"
        OnPreRender="DPTopPreRender">
        <Fields>
            <asp:NextPreviousPagerField FirstPageText="&lt;&lt;" ShowFirstPageButton="True" ShowNextPageButton="False" />
            <asp:NumericPagerField />
            <asp:NextPreviousPagerField LastPageText="&gt;&gt;" ShowLastPageButton="True" ShowPreviousPageButton="False" />
        </Fields>
    </asp:DataPager>

列表视图

<asp:ListView runat="server" ID="resultsLV" OnItemDataBound="resultsLV_ItemDataBound" OnPagePropertiesChanging="PagePropertiesChanging">
        <ItemTemplate>
            <div class="result" runat="server" id="resultItem">
            </div>
        </ItemTemplate>
</asp:ListView>

后面的代码:

protected void Page_Init(object sender, EventArgs e)
    {
        // Assign page size
        if (Session["PerPage"] != null && !IsPostBack)
        {
            DPTop.PageSize = Convert.ToInt32(Session["PerPage"]);
            DPBottom.PageSize = Convert.ToInt32(Session["PerPage"]);
        }
        else
        {
            DPTop.PageSize = 12;
            DPBottom.PageSize = 12;
        }
    }

 protected void Page_Load(object sender, EventArgs e)
    {
       if(!ispostback)
       {
          //bind the data
       }
    }
4

1 回答 1

1

您必须在 DataPager Init 事件中设置 datapager 页面大小:

aspx:

<asp:DataPager ID="DataPager1" runat="server" QueryStringField="pageNumber" 
                PagedControlID="lvItemList" OnPreRender="DataPager1_PreRender" OnInit="DataPager1_Init">

C#

protected void DataPager1_Init(object sender, EventArgs e)
{
    DataPager1.PageSize = 8;
}
于 2013-05-23T16:17:56.683 回答