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

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

Мигает DBGrid [D7]


Страницы:   1 2

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]


Страницы:   1 2

Наверх

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