Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.16;
Скачать: CL | DM;

Вниз

Вопрос о DrawColumnCell   Найти похожие ветки 

 
Wik   (2002-04-19 14:12) [0]

Добрый день мастерам!
Вот какой вопрос. Вместо разных id подставляю значения и все было бы замечательно, если бы не одно но: после того как побываю в окне редактирования записи (оно у меня на другой форме), все подставленные значения (кроме текущей записи) исчезают. что за глюк и как с ним бороться? Refresh не помогает.


 
Val   (2002-04-19 14:21) [1]

Нужно для этого использовать либо запрос, либо лукап поля.
Так у вас происходит потому, что перерисовываются все ячейки, а значений для отображения не получают, кроме текущей.


 
Johnmen   (2002-04-19 14:21) [2]

??????????/


 
wik   (2002-04-19 14:49) [3]

Это как?


 
Johnmen   (2002-04-19 15:25) [4]

Если все еще есть желание получить ответ, задавай вопрос так, чтобы все понимали ...


 
wik   (2002-04-19 15:29) [5]

Извините, но я не совсем понял, как сделать. Можно примерчик пожалуйста?


 
Johnmen   (2002-04-19 15:39) [6]

Чего сделать-то ???????????????


 
wik   (2002-04-19 15:56) [7]

Val сказал правильно. Все вычисляемые ячейки очищаются кроме текущей записи. Что сделать, чтобы они не очищались?


 
Val   (2002-04-19 16:03) [8]

>wik (19.04.02 15:56)
так это в вопросе сказано так :)
а откуда вы берете значения для вписывания их вместо id?


 
Lusha   (2002-04-19 16:05) [9]

>wik (19.04.02 15:56)
К вашему сведению вместе с гридом у Вас создается объект TGridDataLink связанный с гридом... Он содержит буфер записей (равный количеству видимых в гриде строк) и грид отрисовывает содержимое ячеек исходя из значений этого буфера... Так что лично я не понимаю, что у Вас происходит...


P.S. Может все таки приведете пример кода?


 
wik   (2002-04-19 16:32) [10]

при входе на форму с гридом все в порядке.

procedure TFirmsF.DBGr1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var p1:integer;
s1,st1,s0:String;
begin
//---


 
Johnmen   (2002-04-19 16:41) [11]

Случай тяжелый...требует срочного хирургического вмешательства...:))))))))


 
Lusha   (2002-04-19 16:48) [12]

Основываясь на Вашем коде предположу, что грид в Вашей программе привязан к ZMySQLFirms... Если так, то следующая строка неверна...
try p1:=DM.ZMySqlQFirms.FieldByName("relat_id").Asinteger
И должна быть заменена на...
try p1:=TDBGrid(Sender).DataSource.DataSet.FieldByName("relat_id").Asinteger

Вообще у меня много чего есть сказать по этому коду... но я лучше промолчу... :)



 
wik   (2002-04-19 17:02) [13]

Lusha, я с благодарностью выслушаю Ваши замечания. Надо же когда-нибудь учиться писать по человечески.


 
Val   (2002-04-19 17:07) [14]

>Wik (19.04.02 14:12)
Знаете, не зря все так улыбаются-как у вас со скоростью при таком коде?
еще раз повторюсь-для отображения соответствующих ID значений из других таблиц нужно использовать лукап-поля либо соответствующие запросы в квери, выбирающие нужные значения по связям между таблицами.
А OnDrawColumnCell используют для чего нибудь попроще-например у вас в таблице поле принимает значения true или false(1 или 0), с помощью обработки этого события можно отобразить для пользователя "Да" либо "Нет" или что угодно еще.


 
Lusha   (2002-04-19 17:24) [15]

>wik (19.04.02 17:02)
Ну, так если внести изменения согласно Lusha © (19.04.02 16:48)...


 
wik   (2002-04-19 17:34) [16]

Спасибо за совет.
Скорость, как ни странно, прекрасная.query открывается только один раз, и фильтр работает гораздо быстрее чем select...where, особенно если поле неиндексировано.
Кстати, предыдущий совет не сработал.
Ячейки затираются даже в том случае, если их просто накрыть каким-нибудь окном.


 
Lusha   (2002-04-19 17:40) [17]

Странно... Впрочем, если учесть, что Query открывается всего один раз... :)


 
wik   (2002-04-19 17:45) [18]

Конечно. Там же стоит
if DM.ZMySqlQrelat.Active=False then begin
pr_open(st1, DM.ZMySqlQrelat);

Конечно, если бы MySQL поддерживал вложенные запросы, этой проблемы просто не возникло бы. Но...


 
Lusha   (2002-04-19 17:56) [19]

Нашел... Орисовка работает только для p1>0. Иначе FillRect (читай пустая ячейка)...

До понедельника...


 
wik   (2002-04-19 18:04) [20]

У меня p1>0 всегда, т.к. это id.


 
Lusha   (2002-04-19 22:42) [21]

Вынужден признать, что представленный Вами код рабочий (проверил на Delphi 4 на DBDEMOS, слегка оптимизировав, разумеется), а все мои реплики, скажем так, "не в кассу"... :(

Единственное, что могу предложить в данной ситуации - убедиться, что ZMySqlQrelat используется лишь в представленном Вами обработчике...

P.S. Прислушайтесь к Val. Переходите на Lookup поля...



Страницы: 1 вся ветка

Текущий архив: 2002.05.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
1-49927
UniQ
2002-05-03 19:05
2002.05.16
Изменение свойств динамически создаваемой формы


3-49877
Kolyan
2002-04-19 16:36
2002.05.16
Как перевести базу в SQL Server?


3-49864
PepperLover
2002-04-19 11:50
2002.05.16
ADO - выбор стратегии


1-49920
VS2001
2002-04-30 05:52
2002.05.16
Закрытие формы самой себя вызванной из DLL


4-50170
Viktor_TM
2002-03-15 14:41
2002.05.16
Отслеживание выполняемых процессов