Как заставить список просмотров, чтобы показать первую страницу программно

StackOverflow https://stackoverflow.com/questions/2849449

  •  27-09-2019
  •  | 
  •  

Вопрос

У меня есть Paged ASP.NET ListView. Показанные данные отфильтрованы, которые можно управлять формой. Когда фильтр изменяется изменяется, я создаю новый запрос и выполните databind.

Проблема, однако, когда я перехожу на следующую страницу, и установила фильтр, отображает список «Нет возврата данных». Это не странно, потому что после того, как фильтр применяется, существует только одна страница данных.

Так что я хочу сделать, это сбросить пейджер. Это правильное решение проблемы? И как мне это сделать?

Это было полезно?

Решение

Я использую этот хак в моем обработчике нагрузки. Это не будет сбросить пейджер, если количество элементов результатов одинаково, но индекс страницы все равно будет действительным, поэтому я могу жить с этим.

if (IsPostBack)
{
    DataPager pgr = MyListView.FindControl("MyPager") as DataPager;
    if (pgr != null && MyListView.Items.Count != pgr.TotalRowCount)
    {
        pgr.SetPageProperties(0, pgr.MaximumRows, false);
    }
}

Другие советы

Если вы знаете, как это сделать, это просто. Я добавил код ниже моему onchange-Вцены моего фильтра:

DataPager pager = ListViewReference.FindControl("DataPagerId") as DataPager;
if (pager != null)
{
    pager.SetPageProperties(0, pager.PageSize, true);
}

Любое из приведенных выше решений правильно, поскольку они оба называют тот же метод. Я просто думаю, что следует отметить, что вы должны позвонить yourPagerElement.SetPageProperties(...) Везде, где вы хотите, чтобы ваш источник данных (то есть список или массив и т. Д.) Быть обновленным. Например, после нанесения некоторой фильтрации или что-то, что значительно изменяет размер списка.

У вас могут быть проблемы, если ваш список просмотров автоматически ограничен (то есть ObjectDataSource)

Обработчик событий Load не работает, потому что у вас еще нет нового значения dataPager.totalrowpage, но вы можете обрабатывать страницу_пререндераComplete, как это:

    protected void Page_PreRenderComplete(object sender, EventArgs e)
    {
        // PreRenderComplete occurs just after databindings page events
        // And saves to viewstate

        // Trick on search to avoid "No data" on results when old page is greater than actual row count                
        if (DataPager1.StartRowIndex  > DataPager1.TotalRowCount )
            DataPager1.SetPageProperties(0, DataPager1.MaximumRows, true);
    }

Это всегда оставляет ListView на странице с данными. Если страница больше, чем Toverrow, переключитесь на первую страницу.

Примечания: Я использую эфикантивную пейджинг, и возвращая только данные, которые будут отображаться, поэтому мне нужно решить de datasource (последний параметр (true))

Минусы: двойное databind, если StartroWindex больше, чем TotalRowcount.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top