Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DevExpress cxGrid [D7]


Страницы:   1 2 3

shadow_hawk ©   (2013-05-23 19:05:00) 

Добрый день!

Помогите плизз справиться с задачкой:

Для ускорения навигации в cxGrid включил:
DataController.DataModeController.GridMode := True;

Что получил:
Плюс:
 Скорость увеличилась (это и понятно - сколько надо отобразить строк столько и грузится, а не вся таблица целиком, а в ней около 33000 записей)

Минус:
Фильтр больше не работает. В Footer не показывается количество строк (соответствующих фильтру), просто 0.

По фильтру:
У разработчиков увидел намек на то, что надо обрабатывать событие для фильтра - OnBeforeChange, но что там писать??? не пойму :(
Попытался хотя бы количество и номер строки выяснить:


procedure TFormMain.DBTableViewDataControllerFilterBeforeChange(
 Sender: TcxDBDataFilterCriteria; ADataSet: TDataSet;
 const AFilterText: String);
var
 ARecNo, ARecordCount : integer;
begin
 if NOT ( FormMain.DBTableView.DataController.FilteredRecordCount = 0 ) then
 begin
   with DBTableView.DataController do
   begin
     if IsGridMode then
     begin
       ARecNo := DataSet.RecNo;
       ARecordCount := DataSet.RecordCount;
     end;
   end;
   Caption := ' ARecNo= "' + IntToStr(ARecNo)+
               '" ARecordCount= "' + IntToStr(ARecordCount) + '"';
 end;
 DBTableView.DataController.Summary.FooterSummaryValues[1] := IntToStr(ARecNo);
end;


В заголовке окна вижу - считается правильно - и общее кол-во видно и номер строки. Только общее количество постоянно - фильтр не работает, хотя в области фильтра я вижу строку активного фильтра:


(firma = Тест)


Как было до включения GridMode (и работало):
По правой кнопке выбираю значение ячейки и вызываю процедуры построения и активации фильтра:


procedure TFormMain. MenuItem1Click(Sender: TObject);
begin
 if NOT ( FormMain.DBTableView.DataController.FilteredRecordCount = 0 )   then
 begin
  FilterLike(( DBTableView.Controller.FocusedColumn as TcxGridDBColumn ),
              ( DBTableView.Controller.FocusedColumn as TcxGridDBColumn ).DataBinding.Field.Text, False );
 end;
end;



procedure FilterLike(Col: TcxGridDBColumn; Text: Variant; FlagAddFiltr: Boolean );
begin
   Screen.Cursor := crHourGlass;
   with FormMain.DBTableView.DataController.Filter do
   begin
     if NOT FlagAddFiltr then Clear;
     AddItem( Root, Col, foLike, Text, Text );
     Active := true;
   end;
   Screen.Cursor := crDefault;
end;


Kilkennycat   (2013-05-24 06:27:00) [41]


>  общее количество постоянно - фильтр не работает

странный вывод. с чего бы датасет.рекордкоунт должен измениться? да и вообще, почему рассматриваешь DataSet, когда там ADataSet?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо