Jump to content

uniDBGrid autoload/дозагрузка (BufferedStore)


x11

Recommended Posts

А может ли сетка uniDBGrid быть с "бесконечной" прокруткой? Попытаюсь объяснить.

Внизу сетки есть пагинатор. Так вот, чтобы пользователь не нажимал каждый раз Next page, можно ли сделать так, чтобы был не переход а следующую страницу, а просто дозаагрузка данных прямо в таблицу.

Например, в сетке видны 100 записей. Пользователь прокручивает-прокручивает-прокручивает, а когда курсор доходит до 90ой записи, то в таблицу догружаются ещё, например, 50 записей, таким образом в сетке видных уже 150 записей.

Но... в базе может быть миллион записей и не все их надо дозагружать, иначе памяти не хватит, поэтому верхние записи можно "уничтожать", чтобы в сетке было одновременно не более 200-300 записей.

Типа RecyclableList: в сетке создаётся столько строк, сколько видно на экране + ещё небольшой запас, а при прокрутке предыдущие невидимые удаляются, а вместо них добавляются другие вниз или вверх сетки, в зависимости от направления прокрутки.  В базе имеем огромный массив , а в интерфейсе рисуем только необходимое для отображения кол-во, соответственно и TDataSet тоже имеет такое количество записей.

Надеюсь понятно пояснил.

Link to comment
Share on other sites

Есть свойство uniDBGrid.WebOptions.Paged:=false; Это чтобы по страницам не клацать. 

Ну и логично uniDBGrid.WebOptions.FetchAll:=false; 

На счет того чтобы верхние записи выгружал не могу сказать. 

Link to comment
Share on other sites

К сожалению, создатели примеров не пишут там, что именно надо включить/отключить, чтобы тот или иной пример работал именно так.

Вот ест пример "Grid - Infinite Scroll". И что там надо включить/отключить?

 

Link to comment
Share on other sites

2 hours ago, x11 said:

К сожалению, создатели примеров не пишут там, что именно надо включить/отключить, чтобы тот или иной пример работал именно так.

 Вот ест пример "Grid - Infinite Scroll". И что там надо включить/отключить?

 

Всё хорошо видно в dfm, открывай и смотри что там поменяли по сравнению с дефолтными свойствами.

Link to comment
Share on other sites

Я правильно понимаю, что свойства BufferedStore и WebOptions.Paged в runtime менять нельзя? Их можно менять только при создании окна или в designtime?

Link to comment
Share on other sites

В событии UniFrameCreate

    UniDBGrid1.BufferedStore.Enabled := true;
    UniDBGrid1.WebOptions.Paged      := false;

Открываю фрейм, а таблицы просто нет. Т.е. вообще, даже заголовка нет. Никаких ошибок и исключений не возникает.

Что я делаю не так?

Link to comment
Share on other sites

грид привязан к датасету? может поля попробовать создать в самом гриде, хотя он должен все показать, если не создавать

Link to comment
Share on other sites

Всё привязано и всё создано.

Как только переключаю в paged - всё работает.

Пример Infinity Grid, где используется ClientDataSet, работает.

А я использую UniDAC с SQL-запросом и у меня не работает. Поэтому хотелось бы знать, что включить/отключить в TUniQuery, чтобы оно взлетело.

Link to comment
Share on other sites

Я так понял, что нужно

1. Включить FetchOptions.Enabled;

2. Установить FetchRows равное Grid.BufferedStore.PageSize.

 

В тестовом примере у меня заработало. Но тут 2 поля (ID, NAME). А в рабочем проекте около 50 разных полей.

Осталось выяснить: какие параметры/свойства/настройки у TUniQuery влияют на нормальную работу BufferedStore.

Может быть даже проблемы у самой сетки,  т.к. у сетки есть разные события, может они влияют.

Мало того, в рабочем проекте сетка и датасет находятся во фрейме, а не в форме. Мало того, фрейм с сеткой наследуется.

Link to comment
Share on other sites

Обратил внимание, что проблемная сетка в DevTools описана серым шрифтом, а не синим, что это значит?

Я так понимаю, что она невидима по какой-то причине?

Screenshot_2.jpg

Link to comment
Share on other sites

осталось понять: кто, где и зачем выставляет сетке это свойство...

и почему оно включается при включенном BufferedStore именно в этом проекте

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

Link to comment
Share on other sites

Подскажите, может есть в настройках UniGUI какой-нибудь debug-режим, который позволит увидеть и/или логировать ошибки/исключения низкого уровня?

Link to comment
Share on other sites

59 minutes ago, x11 said:

Подскажите, может есть в настройках UniGUI какой-нибудь debug-режим, который позволит увидеть и/или логировать ошибки/исключения низкого уровня?

Смотря какие ошибки Вы имеете в виду, как Вы знаете, что многие вещи также выполняются на стороне клиента (JS)... 

Link to comment
Share on other sites

Да, хоть какие-нибудь...

Я уже не знаю, что проверять. На стороне сервера исключений нет, в консоли бразуера ошибок нет.

Link to comment
Share on other sites

Я про то, что может быть где-то в недрах UniGUI и возникают ошибки и они просто подавляются и не отображаются нигде. Типа "тихий режим".

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...