none
ListView, DataPager, проблема с пейджингом RRS feed

  • Вопрос

  •  

    Есть обычный asp:ListView.

    В файле скрытого кода:

    ListView1.DataSource = Person.BlogPost;    // это EntityCollection <BlogPost>, берётся из EF
    ListView1.DataBind();

    Чуть выше ListView в файле .aspx есть DataPager:

          <asp:DataPager runat="server" ID="BeforeListDataPager"
            PagedControlID="ListView1"
            PageSize="8">
            <Fields>
              <asp:NumericPagerField ButtonCount="10" />
            </Fields>
          </asp:DataPager>

    Проблема: страницы листаются с запозданием на один postback, то есть:

    загружаем страницу, открывается стр. 1

    жмём стр. 5, открывается стр. 1

    жмём стр. 2, открывается стр. 5

    жмём стр. 8, открывается стр. 2

    и так далее.      

     

    Подскажите, пожалуйста, в чём может быть проблема. Спасибо.

    14 июля 2010 г. 16:47

Ответы

  • ulcer, вы шутите? Это ответ по-вашему? :) Это только подробное описание проблемы.

    Ответ тут:

    http://nayyeri.net/using-datapager-and-listview-controls-with-a-custom-data-source-in-the-asp-net

    • Помечено в качестве ответа EgorSandy 15 июля 2010 г. 11:37
    15 июля 2010 г. 11:37

Все ответы

  • Вот здесь обсуждается похожая проблема.

    И еще можешь попробовать связать DataPager и ListView не через PagedControlID а поместив его в ListView. LayoutTemplate.

     

    15 июля 2010 г. 4:19
    Модератор
  • Спасибо за подсказки, Eval-выражения у меня стоят в ItemTemplate, это не помогло, а помещать DataPager в LayoutTemplate я пока не стал, это мне не подходит, придётся делать это наверное в крайнем случае.

    Я скачал рабочий пример со страницы документации по DataPager:

    http://msdn.microsoft.com/ru-ru/library/system.web.ui.webcontrols.datapager.aspx

    Запустил его, он работает.

    Когда я перестал использовать

     

      <asp:SqlDataSource ID="ProductsDataSource" runat="server"
      ConnectionString="<%$ ConnectionStrings:AdventureWorks_DataConnectionString %>"
      SelectCommand="SELECT P.ProductID, P.Name, P.Color, P.ListPrice,
       PF.ThumbnailPhotoFileName
       FROM Production.Product AS P
       INNER JOIN Production.ProductProductPhoto AS PPF ON P.ProductID = PPF.ProductID
       INNER JOIN Production.ProductPhoto AS PF ON PPF.ProductPhotoID = PF.ProductPhotoID">
      </asp:SqlDataSource>
    
    
    который был прикручен к ListView как
    DataSourceID="ProductsDataSource"
    
    
     

    а вместо этого сделал

     

     protected void Page_Load(object sender, EventArgs e)
    {

    ProductsListView.DataSource = Person.BlogPost;
     ProductsListView.DataBind();


    }

    Возникла проблема, которую я описывал. Причём верхний и нижний пейджеры ведут себя по-разному, верхний вызывает постбэки, при этом на странице вообще ничего не меняется. А нижний листает с запаздыванием на один клик.

    Был бы рад услышать ваши соображения.

    UPD: Поместил DataPager в LayoutTemplate, то же самое. Дело видимо в привязке данных из события Page_Load страницы.

     

     

    • Предложено в качестве ответа ulcerModerator 15 июля 2010 г. 11:08
    • Отменено предложение в качестве ответа EgorSandy 15 июля 2010 г. 11:36
    15 июля 2010 г. 8:25
  • ulcer, вы шутите? Это ответ по-вашему? :) Это только подробное описание проблемы.

    Ответ тут:

    http://nayyeri.net/using-datapager-and-listview-controls-with-a-custom-data-source-in-the-asp-net

    • Помечено в качестве ответа EgorSandy 15 июля 2010 г. 11:37
    15 июля 2010 г. 11:37