Dronton2
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору qwertEHOK Боюсь показаться навязчивым, но я так и не понял, в чём проблема. Накропал пример за пару минут: 1. Размещаем на форме 3 компонента: - Запрос к БД query1 - cxGrid, содержащий cxGrid1DBTableView1 - DataSource и связываем их 2. Запрос к БД query1 (ODAC): Код: select * from some_table where &FLT | 3. Событие в cxGrid1DBTableView1: Код: procedure TForm1.cxGrid1DBTableView1DataControllerFilterChanged( Sender: TObject); begin query1.Close; if (cxGrid1DBTableView1.DataController.Filter.FilterText = '') or (not cxGrid1DBTableView1.DataController.Filter.Active ) then query1.MacroByName('FLT').Value := '1=2' else query1.MacroByName('FLT').Value := cxGrid1DBTableView1.DataController.Filter.FilterText; query1.Open; end; | 4. cxGrid1DBTableView1.DataController.GridMode := true; Вот и всё. Если фильтр пуст или неактивен, то запрос к БД возвращает 0 записей. В остальных случаях - возвращает отфильтрованные записи. И query1 считывает их по мере необходимости, только то, что нужно показать пользователю. Пользователь изначально видит пустую таблицу, без записей (т.к. условие в запросе: "where 1=2"). После того, как пользователь назначит фильтр, cxGrid будет показывать отобранные записи, подгружая их по необходимости. Можете сделать строку фильтра видимой полюзователю всегда: cxGrid1DBTableView1.FilterBox.Visible := fvAlways; | Всего записей: 460 | Зарегистр. 27-06-2005 | Отправлено: 14:21 12-10-2016 | Исправлено: Dronton2, 14:47 12-10-2016 |
|