Перейти к содержанию
Fire Monkey от А до Я
  • 0

Не отрисовываются итемы при FetchOptions.Mode:=fmManual у DataSet'a


mab

Вопрос

Доброго времени суток, коллеги.

Столкнулся с проблемой неотрисовки итемов в ListView при выставлении свойства TFDQuery.FetchOptions.Mode := fmManual. Данные с TListView (и TGrid) связаны посредством LiveBindings. На скрине видно, что данные в принципе загружены в датасет и даже отображаются в TGrid, но не в Listview.

post-245-0-84003800-1433937072.png

Может кто сталкивался? Варианты пробовал разные, бьюсь 3-й день, но увы(

До решения в общем додумался (но вышеуказанный способ не выходит из головы))): отлавливать событие, что список прокручен до упора и увеличивать свойство FetchOptions.RecsMax (при FetchOptions.Mode := скажем fmAll).

Для чего нужно: открывать без задержек таблицы с большим количеством записей, не загружая их в датасет сразу все. fmOnDemand необходимого эффекта не дал - все равно загружаются все записи сразу. Хотя здесь (http://docwiki.embarcadero.com/Libraries/XE8/en/FireDAC.Stan.Option.TFDFetchOptions.Mode) о свойстве с этим значением написано обратное.

PS. Delphi XE7 (XE8), БД SQLite. Проект в прицепе.

33333.zip

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Похоже FireDAC плохо дружит с LiveBinding. Я тоже напоролся на проблему - не обновляются данные. 

Есть 3 три таблицы, связанных внешними ключами через Master/Detail, по цепочке 1>2>3. Если перейти по записям в первой таблице - во второй данные обновятся, а в третьей - нет. Обновляются только если нет связанных данных.

Самое интересное то, что точно такой же проект, с теме же таблицами на VCL отлично работает. Из чего складывается вывод - косячит биндинг. Точнее TBindSourceDB.

Изменено пользователем DirtyBorov
Ссылка на комментарий
  • 0
В 10.06.2015 в 18:01, mab сказал:

Может кто сталкивался?

Я столкнулся. В 10.3.1 проблема всё еще имеется, как решить - не пойму.

В 11.08.2015 в 04:03, DirtyBorov сказал:

Самое интересное то, что точно такой же проект, с теме же таблицами на VCL отлично работает. Из чего складывается вывод - косячит биндинг. Точнее TBindSourceDB.

А Вы решили эту проблему?

Ссылка на комментарий
  • 0

Короче нашел способ, чтобы добавлялись Item при LiveBinding! Потратил кучу времени. Вот так:

  FDQuery1.FetchNext;
  LinkFillControlToField1.Active := False;
  LinkFillControlToField1.Active := true;

Но есть тогда другая проблема - ListView прокручивается на самый верх при добавлении новых строк.

Решил это вот так:

procedure TForm1.ListView1ScrollViewChange(Sender: TObject);
var
  ItemHeight, p: single;
begin
  p := ListView1.ScrollViewPos;
  ItemHeight := ListView1.ItemAppearance.ItemHeight;
  if ListView1.ScrollViewPos + ListView1.Height > ItemHeight * 0.8 * ListView1.ItemCount then
  begin
    FDQuery1.FetchNext;
    LinkFillControlToField1.Active := False;
    LinkFillControlToField1.Active := true;
    ListView1.ScrollViewPos := p;
  end;
end;

В принципе работает, надо только добавить условия, что все данные показаны и т.п., но наверное не буду я всё равно делать на биндингах.

Хочу всё переделать назад на ручное добавление элементов. Подумаю как лучше будет работать.

Изменено пользователем qz5
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...