![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Мигает DBGrid [D7]
LinOS © (2003-12-08 13:48:00)
Кважаемые мастера.
Есть два DBGrid`а. при навигации в первом гриде выполняется
процедура AfterScroll в которой выполняется запрос. Данные этого запроса отображаются во втором гриде. МОжно ли сделавть, что бы при навигации в первом гриде второй не моргал?
LinOS (2003-12-10 12:35:00) [1]
Все, разобрался.
действительно
DisableControls;
EnableControls;
работает, только моргал из-за, того что после него менял ширину Visible колонок.
Сейчас создал все необхоримые колонки которые будут в запросе в OnCreate и там задал их парамтры. После этого перестало моргать.
Всем большое спасибо за полезные советы.
Vemer (2003-12-10 12:32:00) [2]
Может быть повторюсь, но такого решения здесь не заметил.
Мигание Грида часто можно убрать, если на время действий с его данными делать сначала DataSource.Enabled := False, а после действий - True, ведь за связь c визуальными компонентами именно он отвечает. Я даже специально проверял, при ручной прописке связи мастер-детайл мигало меньше, чем при стандартной связке через поле.
Silver Alex (2003-12-10 12:18:00) [3]
> LinOS © (10.12.03 12:05) [31]
вот так рефрешь,у меня не моргает или я не понимаю что значит моргнет
procedure RefreshDet;
begin
with DataSet do
try
DisableControls;
Close;
Open;
finally
EnableControls;
end;
end;
LinOS (2003-12-10 12:05:00) [4]
> Silver Alex ©
Спасибо, я не сомневаюсь что поможет, но в итоге все равно грид моргнет потому как ClientDataSet закрываю и открываю, что бы выполнить новый запрос. Или нет?
Silver Alex (2003-12-10 11:56:00) [5]
> LinOS © (10.12.03 11:42) [26]
Слушай, не хочу навязываться.Но я уже тебе говорил, есть компонент.Там реализована именно задержка события OnDataChange. То что ты делаешь на DataSet.OnAfterScroll можно повесить на DataSource.OnDataChange.Так в компоненте реализована именно задержка этого события на сколько-то милисекунд.Т.е. ты перемещаешься по гриду с первой записи на двадцатую, так вот событие OnDataChange произойдет не 20 раз а меньше, может 4, а может один как настроишь таймаут.Возьми попробуй, если поможет буду рад http://www.delphimaster.ru/cgi-bin/download.pl?get=1067936708&n=0
P.S. если будут вопросы напиши мне
Dimosha (2003-12-10 11:54:00) [6]
lockwindowupdate(dbgrid1.handle);
...
...
...
lockwindowupdate(0);
LinOS (2003-12-10 11:51:00) [7]
> Danilka © (10.12.03 09:19) [20]
> привяжи второй ClientDataSet как датальную таблицу к первому, и будет тебе щастье :))
Привязать то я привяжу, а куда выполнение запроса писать, в этом случае, что-то не пойму.
Danilka (2003-12-10 11:44:00) [8]
[25] Alex_Bredin © (10.12.03 11:36)
понятия не имею :))
лень копаться в исходниках, смотреть как они это организовали.
LinOS (2003-12-10 11:42:00) [9]
>Silver Alex
Точно так.
Alex_Bredin (2003-12-10 11:36:00) [10]
Сорри за оффтоп
2 Danilka
кроме шуток,а чем это объясняется?
Danilka (2003-12-10 11:29:00) [11]
[22] Alex_Bredin © (10.12.03 11:14)
> если я все правильно понимаю, особой разницы между тем,
> что делает автор поста и связкой через MasterSource нет
> - параметрические запросы выполняются и там и там, способы
> только разные. Проблема-то в другом.
угу, получается одно и тоже, только когда делаешь как автор на AfterScroll то моргает, а когда так как я написал - не моргает. :))
я сам раньше завязвался на AfterScroll, замучился бороться с морганием, а оказалось - как все просто. :))
nik222 (2003-12-10 11:25:00) [12]
LinOS - предлагаю следующее решение (которое реально используется на практике)
кидаешь на форму TTimer и в обработчике onTimer пишешь
QueryDetal.close
.... новое условие запроса
QueryDetal.Open
Или
QueryDetal.filter:=.. новый фильтр
QueryDetal.filterd:=false
QueryDetal.filterd:=true
В обработчике QueryMaster AfterScroll пишешь
Timer1.Enabled:=false
Timer1.Enabled:=true
Значение времени задержи 1000 мс (можно и изменить)
Что получается -
если юзер быстро бегает по grid-у то фильтр не успевает сработать
(просто не вышло время Timer)
Как только юзер остановися больше чем на 1 сек, то сразу получил
нужный результат
Моих клиентов это очень устраивает
Alex_Bredin (2003-12-10 11:14:00) [13]
> Danilka © (10.12.03 09:19) [20]
> привяжи второй ClientDataSet как датальную таблицу к первому,
> и будет тебе щастье :))
>
> Подробнее - см. хелп по свойствам MasterSource и MasterFields
> у ClientDataSet.
если я все правильно понимаю, особой разницы между тем, что делает автор поста и связкой через MasterSource нет - параметрические запросы выполняются и там и там, способы только разные. Проблема-то в другом.
Silver Alex (2003-12-10 10:13:00) [14]
> LinOS ©
слушай, не пойму, в чем именно проблема.Вобщем ты все верно делаешь.Но когда бежишь (быстро) по первому гриду, во втором постоянно делается обновление(закрывается и окрывается), так? А ты не хочешь чтобы он постоянно рефрешился? Ты хочешь это побороть?
Danilka (2003-12-10 09:19:00) [15]
привяжи второй ClientDataSet как датальную таблицу к первому, и будет тебе щастье :))
Подробнее - см. хелп по свойствам MasterSource и MasterFields у ClientDataSet.
Вованчик (2003-12-10 08:10:00) [16]
> Вы уж извеняйте меня, но никак не могу понять фразы:
> сцепляй запросы через DataSource.
Посмотри у ClientDataSet свойство MasterSourse :)
Нужно просто указать поля для связи двух таблиц и все ...
Удачи
LinOS (2003-12-10 05:55:00) [17]
Опишу подробнее.
Есть БД.
Есть приложение.
В приложении такая связка.
SQLConnection -> SQLDataSet -> DataSetProvider -> ClientDataSet -> DataSource -> DBGrid. (для каждого грида)
Так вот при открытии формы с двумя гридами для первого ClientDataSet пишу запрос и открываю. В процедуре AfterScroll для него пишу запрос для второго ClientDataSet (соотв. для второго грида) и открываю его (предварительно, если он был открыт, закрываю). Во второй запрос передается значение поля из первого ClientDataSet.
> tchn ©
Вы уж извеняйте меня, но никак не могу понять фразы:
сцепляй запросы через DataSource.
Sandman25 (2003-12-09 15:28:00) [18]
Columns у грида Persistent? Если нет, то он их каждый раз заново создает.
tchn (2003-12-09 15:22:00) [19]
надо ж создать проблему из ничего! сцепляй запросы через DataSource, и не забудь написать в подчиненных запросах
select...where id=:id
HSolo (2003-12-09 15:20:00) [20]
> Alex_Bredin © (09.12.03 14:41) [13]
Никто их не затрет, пока не сойдем с тек.записи
См. HSolo © (09.12.03 13:04) [6]