x11 Posted May 14, 2020 Posted May 14, 2020 А может ли сетка uniDBGrid быть с "бесконечной" прокруткой? Попытаюсь объяснить. Внизу сетки есть пагинатор. Так вот, чтобы пользователь не нажимал каждый раз Next page, можно ли сделать так, чтобы был не переход а следующую страницу, а просто дозаагрузка данных прямо в таблицу. Например, в сетке видны 100 записей. Пользователь прокручивает-прокручивает-прокручивает, а когда курсор доходит до 90ой записи, то в таблицу догружаются ещё, например, 50 записей, таким образом в сетке видных уже 150 записей. Но... в базе может быть миллион записей и не все их надо дозагружать, иначе памяти не хватит, поэтому верхние записи можно "уничтожать", чтобы в сетке было одновременно не более 200-300 записей. Типа RecyclableList: в сетке создаётся столько строк, сколько видно на экране + ещё небольшой запас, а при прокрутке предыдущие невидимые удаляются, а вместо них добавляются другие вниз или вверх сетки, в зависимости от направления прокрутки. В базе имеем огромный массив , а в интерфейсе рисуем только необходимое для отображения кол-во, соответственно и TDataSet тоже имеет такое количество записей. Надеюсь понятно пояснил. Quote
Kenneth Posted May 14, 2020 Posted May 14, 2020 Есть свойство uniDBGrid.WebOptions.Paged:=false; Это чтобы по страницам не клацать. Ну и логично uniDBGrid.WebOptions.FetchAll:=false; На счет того чтобы верхние записи выгружал не могу сказать. Quote
x11 Posted May 15, 2020 Author Posted May 15, 2020 А свойство uniDBGrid.BufferedStore к этому имеет отношение? А то в справке ни слова Quote
x11 Posted May 16, 2020 Author Posted May 16, 2020 К сожалению, создатели примеров не пишут там, что именно надо включить/отключить, чтобы тот или иной пример работал именно так. Вот ест пример "Grid - Infinite Scroll". И что там надо включить/отключить? Quote
Tokay Posted May 16, 2020 Posted May 16, 2020 2 hours ago, x11 said: К сожалению, создатели примеров не пишут там, что именно надо включить/отключить, чтобы тот или иной пример работал именно так. Вот ест пример "Grid - Infinite Scroll". И что там надо включить/отключить? Всё хорошо видно в dfm, открывай и смотри что там поменяли по сравнению с дефолтными свойствами. Quote
x11 Posted May 16, 2020 Author Posted May 16, 2020 Я правильно понимаю, что свойства BufferedStore и WebOptions.Paged в runtime менять нельзя? Их можно менять только при создании окна или в designtime? Quote
x11 Posted May 17, 2020 Author Posted May 17, 2020 В событии UniFrameCreate UniDBGrid1.BufferedStore.Enabled := true; UniDBGrid1.WebOptions.Paged := false; Открываю фрейм, а таблицы просто нет. Т.е. вообще, даже заголовка нет. Никаких ошибок и исключений не возникает. Что я делаю не так? Quote
x11 Posted May 17, 2020 Author Posted May 17, 2020 какие свойство должны быть у датасета, на что обратить внимание? Quote
Kenneth Posted May 17, 2020 Posted May 17, 2020 грид привязан к датасету? может поля попробовать создать в самом гриде, хотя он должен все показать, если не создавать Quote
x11 Posted May 17, 2020 Author Posted May 17, 2020 Всё привязано и всё создано. Как только переключаю в paged - всё работает. Пример Infinity Grid, где используется ClientDataSet, работает. А я использую UniDAC с SQL-запросом и у меня не работает. Поэтому хотелось бы знать, что включить/отключить в TUniQuery, чтобы оно взлетело. Quote
Tokay Posted May 23, 2020 Posted May 23, 2020 у меня работает с унидаком без особенностей. кинь пример, гляну у себя Quote
x11 Posted May 24, 2020 Author Posted May 24, 2020 А какие fetch-параметры должны быть у TUniQuery? Quote
x11 Posted May 24, 2020 Author Posted May 24, 2020 Я так понял, что нужно 1. Включить FetchOptions.Enabled; 2. Установить FetchRows равное Grid.BufferedStore.PageSize. В тестовом примере у меня заработало. Но тут 2 поля (ID, NAME). А в рабочем проекте около 50 разных полей. Осталось выяснить: какие параметры/свойства/настройки у TUniQuery влияют на нормальную работу BufferedStore. Может быть даже проблемы у самой сетки, т.к. у сетки есть разные события, может они влияют. Мало того, в рабочем проекте сетка и датасет находятся во фрейме, а не в форме. Мало того, фрейм с сеткой наследуется. Quote
x11 Posted May 24, 2020 Author Posted May 24, 2020 Обратил внимание, что проблемная сетка в DevTools описана серым шрифтом, а не синим, что это значит? Я так понимаю, что она невидима по какой-то причине? Quote
x11 Posted May 24, 2020 Author Posted May 24, 2020 осталось понять: кто, где и зачем выставляет сетке это свойство... и почему оно включается при включенном BufferedStore именно в этом проекте Кстати, если на главной форме есть сетка с включенным BufferedStore, то в браузере страница белая, пустая. Quote
Sherzod Posted May 24, 2020 Posted May 24, 2020 26 minutes ago, x11 said: и почему оно включается при включенном BufferedStore именно в этом проекте В каком проекте? Quote
x11 Posted May 24, 2020 Author Posted May 24, 2020 Подскажите, может есть в настройках UniGUI какой-нибудь debug-режим, который позволит увидеть и/или логировать ошибки/исключения низкого уровня? Quote
Sherzod Posted May 24, 2020 Posted May 24, 2020 59 minutes ago, x11 said: Подскажите, может есть в настройках UniGUI какой-нибудь debug-режим, который позволит увидеть и/или логировать ошибки/исключения низкого уровня? Смотря какие ошибки Вы имеете в виду, как Вы знаете, что многие вещи также выполняются на стороне клиента (JS)... Quote
x11 Posted May 24, 2020 Author Posted May 24, 2020 Да, хоть какие-нибудь... Я уже не знаю, что проверять. На стороне сервера исключений нет, в консоли бразуера ошибок нет. Quote
x11 Posted May 24, 2020 Author Posted May 24, 2020 Я про то, что может быть где-то в недрах UniGUI и возникают ошибки и они просто подавляются и не отображаются нигде. Типа "тихий режим". Quote
x11 Posted May 24, 2020 Author Posted May 24, 2020 @Sherzod Свойством BufferedStore в runtime можно управлять или нет? Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.