DataPager не перечисляет дальше, чем 2-я страница - PullRequest
1 голос
/ 30 января 2012

DataPager имеет странное поведение.

Итак, чтобы определить проблему, у меня есть DataPagerReapeater с информацией. И у меня есть DataPager, который я сделал, чтобы работать вместе. У меня 3 страницы, но DataPager ведет себя странно.

Когда я на первой странице и нажимаю на следующую, она переходит ко 2-й, все в порядке. Когда я снова нажимаю «Далее», он выполняет обратную передачу, но не переходит на 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

ПРОБЛЕМА РЕШЕНА, похоже, что ретранслятор datapager не был реализован правильно, теперь, когда я нашел источники, я мог бы это исправить. В любом случае спасибо за помощь

1 Ответ

1 голос
/ 30 января 2012

Если я правильно прочитал ваш метод загрузки, вы переустанавливаете ретранслятор на страницу 1 на каждом Page_Load.

Что происходит:

  • В Page_Load,Вы переустанавливаете ретранслятор на страницу 1 в SetPagerProperties() вызове
  • . Во время фазы диспетчеризации событий, диспетчер данных перемещается на следующую страницу относительно страницы 1 :
    • если вы используете «первую» и «последнюю» и конкретные страницы, все работает, потому что они не являются относительными изменениями
    • «следующий» переходит на страницу после страницы 1, поэтому вы застряли настраница 2,
    • «предыдущая» пытается перейти на страницу раньше 1, поскольку ее нет, она остается на 1.

Чтобы исправить это,перестаньте инициализировать пейджер при каждой загрузке страницы.Либо избавьтесь от вызова - я не уверен, почему он есть, я использую его только для «сброса» ретранслятора, например, после того, как пользователь щелкнет заголовок столбца, чтобы отсортировать представление списка.Или переместите его в блок if (!IsPostback).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...