2013-07-26 2 views
2

У меня есть SmartGWT ListGrid с 16 полями, каждая из которых содержит строки. Сетка привязана к источнику данных, предоставляемому через REST. Я столкнулся с проблемами, хотя количество данных в источнике данных велико.SmartGWT ListGrid проблемы с большим набором данных

При работе с очень маленькими номерами проблем нет, даже когда речь идет о 200 000 записей, проблем по-прежнему нет. Однако, когда речь заходит о гораздо более крупных наборах данных, например, у одного из них, который я попробовал ранее, было 2,6 миллиона записей, сетка отображает только первые 850 000 (приблизительно) записей, а затем отказывается ссылаться на страницу. Еще более странно, когда у моего источника данных есть около 20 миллионов записей, сетка отображает только первые 20, а затем вообще отказывается от страницы.

Strangley Я могу видеть данные, возвращающиеся в ответ RPC, используя isc.showConsole(); и может видеть, что он возвращает правильные данные, фактически даже когда он возвращает 64 действительных записях, он отображает только первые 20. Суммарные рекорды должным образом возвращаются как 20 миллионов, но это просто не будет страница.

Моя сетка настроена следующим образом

ListGrid grid = new ListGrid(); 
DataSource ds = Application.getMyDataSource(); 
grid.setCriteria(new Criteria("someid", 627263)); 
grid.setDataSource(ds); 

grid.setAutoFetchData(true); 

Мой Datasource настроен правильно, так как он отлично работает на небольших наборах данных, каждое поле создается как DataSourceTextField.

Серверная сторона принимает входящий запрос, ищет входящий запрос, проверяет, что параметры _startRow, _endRow находят эти строки (я не использую базу данных для этого) и вручную задает поля startRow, endRow и totalRow.

Когда я проверяю возвращаемые данные, данные верны, но сетка отказывается отображать их правильно.

Что мне не хватает? Максимальный размер для списков? Из того, что я видел, они должны обрабатывать миллионы записей, но мои, похоже, полностью не работают.

EDIT

При дальнейшем осмотре кажется, что это ошибка с путем SmartGWT обрабатывает проклейки скроллбара. Я понятия не имею, как исправить это на данный момент.

При прокрутке к нижней части таблицы, на которой должно быть 2,3 миллиона строк таблицы, последняя строка отображается 894,785. Это значительно меньше ожидаемого числа строк.

В настоящий момент все данные, возвращаемые с источника данных, верны. Интересно, нажав на последнюю строку и прокручивая стрелку вниз на клавиатуре, отлично работает, это для меня лишний раз подтверждает, что это проблема с полосой прокрутки.

+0

Это звучит как проблема переполнения/памяти. Вы получаете предупреждения или ошибки? –

+0

Я забыл упомянуть, ошибок нет, нет переполнения, ничего необычного. Данные, переданные через REST, представляют собой только подмножество миллионов записей, поскольку они разбиты на страницы. В общем, он возвращает всего около 60 записей, это то, чего я ожидал бы. Проблема заключается в том, что ListGrid не обрабатывает его должным образом. –

+0

Несколько вещей для проверки: значение totalRows (должно быть больше, чем endRow - +10 - для запуска правильного размера большого пальца прокрутки), количество записей, полученных и возвращаемых с сервера, количество записей, полученных клиенту, начало/конец/общая строка значения во время начала и конца каждого запроса страницы – Sithsu

ответ

0

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

Поскольку мы не хотим набирать 1000 пустых записей (фактических totalRows), когда только 150 извлекается с данными, нам нужно установить totalRows = 160 или что-то, чтобы создать достаточно большой размер большого пальца прокрутки, а также разрешить прокрутку ниже 150 записи, чтобы вызвать прогрессивную загрузку следующей страницы.

Проверил:
Paging and total dataset length in ResultSet
http://forums.smartclient.com/showthread.php?t=516
http://forums.smartclient.com/showthread.php?t=2750

При перемещении пальца прокрутки слишком быстро по направлению к нижней части, сетка может 'разумно' пропустить загрузку промежуточных строк.

ListGrid.showAllRecords может быть то, что вам нужно проверить на основе http://forums.smartclient.com/showthread.php?t=23638.

Эта последняя тема также указывает проблемы с браузерами и большими наборами данных.

Смежные вопросы