DataPager没有列出第二页以外的内容

时间:2012-01-30 16:13:18

标签: c# asp.net datapager datarepeater

DataPager有一些奇怪的行为。

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

当我在第一页时,我点击下一步它转到第二页,一切都很好。当我再次点击它时,它会进行回发,但不会移动到第3页。最后也是第一个也很好。

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

我真的不明白为什么。

以下是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没有以正确的方式实现,现在我找到了可以解决它的来源。无论如何,谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

如果我正确阅读了您的加载方法,那么您每隔Page_Load重置一次转发器到第1页。

会发生什么:

  • Page_Load中,您将转发器重置为SetPagerProperties()来电中的第1页
  • 在控制事件调度阶段,数据传输器前进到下一页相对于第1页
    • 如果您使用“第一个”和“最后一个”以及特定页面,一切正常,因为它们不是相对变化
    • “next”转到第1页之后的页面,这就是为什么你被困在第2页
    • “previous”尝试转到1之前的页面,因为没有,它会保持在1。

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