![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DevExpress cxGrid [D7]
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?