|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
TDBGridEh + STFilter Как сделать что бы работало?
Всем доброго времени суток!! Надеюсь я пишу в правильный раздел.
Сомневаюсь так как и к БД относиться вопрос, но скорее конкретно к компоненту TDBGridEh . Много часов просидел за гуглом, много читал всякого, многое перепробовал... К сожалению нигде и никак не могу найти то что мне нужно. Итак. Связка данных: TADOConnection -> TADODataSet -> TDataSource -> TDBGridEh Из того что я понял и сделал с TDBGrid: STFilter > Locale: True Visible: True Так же для поля, по которону нужно фильтровать, указал сделующее свойство: STFilter > DataField: Regime {Название самого поля} Пробовал всяко разно.. Например пробовал добавлять такое событие(обработчик): Код:
procedure TfmContract.DBGridEh1Filtered(Sender: TObject; index: Integer; column: TColumnEh; var text: String); begin //ShowMessage(text); dsContractSelect.Filter := text; dsContractSelect.Filtered := False; dsContractSelect.Filtered := True; end; Но он работает совершенно некоректно. В общем при всем моем желании, фильтр не работает, по какой причине я никак не могу понять. Пожалуйста, объясните мне в чем я неправ, и что нужно делать для того что бы это все заработало. В качестве СУБД используется MS SQL 2000. Хотя не думаю что это имеет разницу. Я видел работающий фильтр данного компонента, но ни разу не видел как он настраивается "Люди никогда не видят то, существование чего им кажется невозможным." ©Терри Пратчетт |
#2
|
|||
|
|||
DBGridEh не может сам фильтровать данные. Об этом прямо сказано в справке по EHLib. Фильтровкой данных должен заниматься DataSet, а DBGridEh только отображает данные.
Поэтому выражение фильтра надо указывать непосредственно для TADODataSet в свойстве CommandText в части SQL выражения "WHERE". Примерно так: Код:
ADODataSet1.Close; ADODataSet1.CommandText := 'select * from NewTable where Имя="SERGEY"'; ADODataSet1.Open; Не забывайте делать резервные копии |
#3
|
||||
|
||||
2 san-46
Да, я с вами соглашусь в том случае если Вы имеете ввиду фильтрацию на сервере, однако когда происходит фильтрация "Локальная" методы Грида формируют строку для свойста ДатаСета - Filter Фильтрация локальная получается со всеми вытекающими, но именно она мне была нужна. Но в любом случае спасибо большое за отклик и провещение! Так вот. Парадокс был в чем? Я и сам не могу точно сказать, однако вчера уже в состоянии отчаяния, удалил сам Грид, ДатаСет и ДатаСоурс. Создал их заново, заново повторил все действия что делал(и описывал) ранее, и все заработало!!! Толи я каким-то макаром где-то что-то включил или отключил помимо необходимого, толи просто глюк О_о Но не важно. Главное что описаные мною действия верны. Добавляем в код либо при инициализации DLL либо при создании формы такую строку: Код:
DBGridEhDefaultStyle.FilterEditCloseUpApplyFilter := True; Так же в раздел USES добавляем EhLibADO если Вы используете ADO компоненты для работы с базой. Ну а так же: STFilter > Locale: True Visible: True Для удалёной фильтрации: STFilter > Locale: False Visible: True Это ключевые действия для того что бы фильтры заработали. Ммм, да кстати, для удаленной, необходимо сделать то, о чем говорил san-46 Ну а дальше дело техники.. Можно делать множество всяких настроек, зависит от желаний и умений "Люди никогда не видят то, существование чего им кажется невозможным." ©Терри Пратчетт |