Пейджинг Gridview через ObjectDataSource: почему для MaximumRows установлено значение -1? - PullRequest
7 голосов
/ 24 мая 2010

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

Я установил AllowPaging = True в моем виде сетки.

Я указал PageSize = "10" в моем виде сетки.

Я установил EnablePaging =" True " на ObjectDataSource.

Я добавил 2 параметра подкачки (MaximumRows & startRowIndex) для метода выбора моего бизнес-объекта.

Я создал аналогичный метод "count" с той же сигнатурой, что и у метода выбора.

Единственная проблема, которую якажется, это во время выполнения ... ObjectDataSource предоставляет моему бизнес-объекту значение MaximumRows -1 , и я не могу понять, почему.Я искал до конца в Интернете кого-то еще, кто имеет эту проблему, и, видимо, я единственный.Параметр StartRowIndex работает нормально.

Есть идеи?

Ответы [ 5 ]

6 голосов
/ 06 января 2011

Если SelectCountMethod не указано, PageSize будет -1.

2 голосов
/ 23 ноября 2012

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

Параметры, используемые ObjectDataSource (ODS) для подкачки, - это свойства startRowIndex и maximumRows, но в вашей функции вы вызываете их PageIndex и PageSize.

ODS отображается на страницах, но использует номера строк для отображения страниц. Например, размер страницы, равный десяти (по умолчанию) при первом вызове вашей функции GetProducts(), будет иметь startRowIndex = 0 и maximumRows = 10 - то есть начинаться с нулевой строки и содержать десять строк.

Если пользователь выбирает страницу 2, то вызывается GetProducts с startRowIndex = 10 и maximumRows = 10. Для страницы 3 это будет startRowIndex = 20 и maximumRows = 10

Я предлагаю вам переименовать ваши параметры, чтобы использовать те же имена - это облегчит кодирование.

0 голосов
/ 31 января 2011

Вам необходимо установить свойство SelectCountMethod в элементе управления ObjectDataSource, а также установить размер пейджера и индексировать его, надеюсь, это решит проблему.

С уважением, Joy

0 голосов
/ 08 июля 2010

Этот обходной путь работает.

Я также столкнулся с той же проблемой.

Когда вы устанавливаете EnablePaging = "true", тогда StartRowIndex настраивается на размер страницы.

Если EnablePaging = "false", то MaximumRows был установлен на ноль.

Однако, если вы установите

e.Arguments.StartRowIndex = m_startRowIndex; 
e.Arguments.MaximumRows = m_PageSize; 

, тогда он работает правильно, однако это обходной путь

0 голосов
/ 09 июня 2010

Вы не одиноки. У меня та же проблема. Моя установка немного отличается. В моем случае я использую ListView вместо элемента управления GridView. Я получил 2 страницы, одна с использованием ListView и DataPager, а другая с использованием ListView и пользовательского элемента управления навигацией (по сути, это то же самое, что DataPager, только другой вывод разметки). Обе страницы используют один и тот же метод BLL и одинаково устанавливают MaximumRow и startRow. В основном скопируйте и вставьте код.

Настройка ListView-DataPager работает нормально, параметры установлены правильно в методе BLL. Страница без DataPager не работает. Но DataPager не может быть причиной. Оба (DataPager и мой пользовательский элемент управления) создают одинаковые ожидаемые значения, которые передаются в коллекцию параметров ObjectDataSource.

Самое запутанное, что SelectCountMethod, который вызывается после SelectMethod, получает правильные параметры в обеих версиях!

Мне удалось обойти эту проблему, установив значения параметров в событии OnSelecting ObjectDataSource:

protected void ObjectDataSource_MyListing_OnSelecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
            e.Arguments.StartRowIndex = m_startRowIndex;
            e.Arguments.MaximumRows = m_PageSize;
}

Я где-то читал, что значение -1 для MaximumRows просто означает «все оставшиеся записи». Так что это будет не ошибка, а значение по умолчанию.

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

...