1

DataPager有一些奇怪的行为。

所以为了解决这个问题,我有一个DataPagerReapeater信息。我有一个DataPager,我一起工作的。我有 3 页,但DataPager有一些奇怪的行为。

当我在第一页并单击下一步时,它转到第二页,一切都很好。当我再次单击下一步时,它会进行回发,但不会移至第三页。最后和第一个也可以正常工作。

但是当我在第二页并单击下一步时,它不会移动到第三页,而是停留在第二页。同样,如果我手动单击第三页并单击上一页,它会转到第一页。

我真的不明白为什么。

这是DataPager

<asp:DataPager ID="DataPager1" PagedControlID="ReapeaterCSGator" PageSize="5" 
        runat="server" onprerender="DataPager1_PreRender">
    <fields>
            <asp:NextPreviousPagerField ButtonType="Link" ShowFirstPageButton="True"  FirstPageText="<< First"
            ShowNextPageButton="False" ShowPreviousPageButton="False" />
        <asp:NextPreviousPagerField ButtonType="Link" ShowFirstPageButton="False"  FirstPageText="< Previous"
            ShowNextPageButton="False" ShowPreviousPageButton="True" />
        <asp:NumericPagerField />
        <asp:NextPreviousPagerField ButtonType="Link" ShowLastPageButton="False"  LastPageText="Next >"
            ShowNextPageButton="True" ShowPreviousPageButton="False" />
        <asp:NextPreviousPagerField ButtonType="Link" ShowLastPageButton="True"  LastPageText="Last >>"
            ShowNextPageButton="False" ShowPreviousPageButton="False" />
    </fields>
</asp:DataPager>

这是我在 PreRender 上执行的代码:

protected override void OnPreRender(EventArgs e)
{
    base.OnPreRender(e);

    IEnumerable<CollaborativeSpace> listCS = LoadCollaborativeSpaces();
    // Binding the repeater with the list of documents
    ReapeaterCSGator.DataSource = listCS;
    ReapeaterCSGator.DataBind();

}

所以,这种行为真的很奇怪,我不知道问题可能是什么。

还有其他人遇到过这样的问题吗?

更新:这是加载方法以及我在那里的内容:

        ResultPerPages = GetResultsPerPage();
        DataPager2.PageSize = ResultPerPages;
        DataPager1.PageSize = ResultPerPages;
        //We initialize the pager repeater with the same value
        ReapeaterCSGator.SetPageProperties(0, ResultPerPages, false);
        //We add an handler on item data bound event for sub repeater
        ReapeaterCSGator.ItemDataBound += ReapeaterCSGator_ItemDataBound;
        //If the user is not post backing
        if (!IsPostBack)
        {
            //We add choices on drop down list "Results per page"
            foreach (int choice in NbResultsChoices)
            {
                NbResultsPerPage.Items.Add(new ListItem(choice + " results per page", choice.ToString(CultureInfo.InvariantCulture)));
            }
            //We get collaborative spaces from Sharepoint list
            //IEnumerable<CollaborativeSpace> listCS = LoadCollaborativeSpaces();
            //// Binding the repeater with the list of documents
            //ReapeaterCSGator.DataSource = listCS;

更新 2:这是 SetPageProperties() 背后的代码

 public void SetPageProperties(int startRowIndex, int maximumRows, bool databind)
    {
        ViewState["_startRowIndex"] =startRowIndex;
        ViewState["_maximumRows"] = maximumRows;
        if (TotalRows > -1)
        {
            if (TotalRowCountAvailable != null)
            {
                TotalRowCountAvailable(this, new PageEventArgs((int)ViewState["_startRowIndex"], (int)ViewState["_maximumRows"], TotalRows));
            }
        }
    }

该组件在此处使用:http: //www.codeproject.com/Articles/45163/Extend-Repeater-to-support-DataPager

问题已解决,似乎 datapagerrepeater 没有以正确的方式实现,现在我找到了可以修复它的来源。无论如何感谢您的帮助

4

1 回答 1

1

如果我正确阅读了您的加载方法,那么您将在每个Page_Load.

会发生什么:

  • Page_Load中,您将中继器重置到SetPagerProperties()呼叫中的第 1 页
  • 在控制事件分派阶段,数据分页器前进到相对于第 1页的下一页:
    • 如果您使用“第一”和“最后”以及特定页面,一切正常,因为它们不是相对变化
    • "next" 转到第 1 页之后的页面,这就是您卡在第 2 页的原因,
    • "previous" 尝试转到 1 之前的页面,因为没有,它保持在 1。

要解决此问题,请在每次页面加载时停止初始化寻呼机。要么摆脱呼叫 - 我不确定它为什么在那里,我只使用它来“重置”转发器,例如在用户单击列标题以对列表视图进行排序之后。或将其移入if (!IsPostback)块中。

于 2012-01-30T17:00:15.013 回答