![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как заставить TClientDataSet перефильтроваться [D5]
yaJohn © (2002-12-11 13:13:00)Приветствую великий Олл!
Есть ClientDataSet, который фильтруется по OnFilterRecord.
Меняем условие фильтрации. Говорим ДатаСету First Last или что-то еще, дабы перефильтроваться. Все работает.
Теперь задаем условие фильтрации которому не соответствует ни одна запись. ДатаСет послушно говорит RecordCount=0. И ни на какие попытки переместить курсор более не реагирует.
Т.е. меняем условие фильтрации но в гриде пусто, RecordCount=0. Тишина и покой.
Пример (дурацкий):
procedure TFrmMain.ClientDataSet1FilterRecord(DataSet: TDataSet;Ну не Refresh же ему делать... Шибко медленно будет...
var Accept: Boolean);
begin
Accept:=CheckBox1.Checked;
end;Filtred:=false;Filtred:=true;не помогает.
Меня клинит и глючит. Столкните с мертвой точки. Как заставить этого поганца перефильтроваться?!
Заранее спасибо!
yaJohn (2002-12-11 15:58:00) [1]Я такой эксперимент проводил. Результат - положительный. Однако метод неприемлимый. с.м. выше.
Johnmen (2002-12-11 15:50:00) [2]>yaJohn © (11.12.02 15:41)
Я разве что-то сказал по поводу необходимости применения Close-Open ? Нет ! Я лишь интересовался результатом эксперимента...
Ну да ладно...:)
yaJohn (2002-12-11 15:43:00) [3]Мда, повторюсь. Трабла наблюдается ТОЛЪКО при RecordCount=0. Смены фильтров оставляющих в датасете хоть одну запись проходят гладко.
yaJohn (2002-12-11 15:41:00) [4]>А где св-во Filtered устанавливается ?????????????
DesignTime. Примерчик - так, от фонаря. На самом деле фильтрация идет, конечно, по полям ДатаСета, а не по чекбоксу.
Шаманство призванное свершить сабж колдуется в OnChange котрола (контролов) которые содержата параметры фильтра.
Close-Open - не лучшая альтернатива Refresh. У меня по тех-заданию медленная сеть и прокачивать всю таблицу кри каждом клике юзера на чекбоксе я просто не могу.
Ну и кроме того, КлиентДатаСет может на момент фильтрации уже содержать дельту, что делает применение Refresh невозможным, а Open-Close - бессмысленным.
Johnmen (2002-12-11 15:35:00) [5]>yaJohn © (11.12.02 15:29)
Чудеса, да и только...
А если сделать Close-Open для ClientDataSet ? Нормально ?
yaJohn (2002-12-11 15:29:00) [6]Определяется визуально в ДБГриде, а так же по RecordCount.
Манипуляции по перемещению курсора First, Last, Next, PRior, а так же манипуляции с
Filtered (таковых я выдумал только две: :=true и :=false.
Насколько я понимаю, при RecordCount=0 OnFilterRecord просто не вызывается....
VAleksey (2002-12-11 15:29:00) [7]Это шутка что - ли ?
А где св-во Filtered устанавливается ?????????????
Johnmen (2002-12-11 15:11:00) [8]>Логично ожидать появления в датасете всех записей.
>Однако этого не происходит ...
Как это определяется ?
>...и никакие манипуляции с датасетом не дают эффекта.
Какие именно ?
yaJohn (2002-12-11 15:00:00) [9]Проблема в следующем (по примеру):
1)изначально CheckBox1.Checked=true соответственно видим все записи датасета.
2)устанавливаем CheckBox1.Checked=false и делаем, например First. Датасет пуст. Все логично.
3)снова устанавливаем CheckBox1.Checked=true. Логично ожидать появления в датасете всех записей. Однако этого не происходит и никакие манипуляции с датасетом не дают эффекта.
Johnmen (2002-12-11 13:44:00) [10]Из изложенного не видно проблемы...