![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос о DrawColumnCell
Wik © (2002-04-19 14:12:00)Добрый день мастерам!
Вот какой вопрос. Вместо разных id подставляю значения и все было бы замечательно, если бы не одно но: после того как побываю в окне редактирования записи (оно у меня на другой форме), все подставленные значения (кроме текущей записи) исчезают. что за глюк и как с ним бороться? Refresh не помогает.
Lusha (2002-04-19 22:42:00) [1]Вынужден признать, что представленный Вами код рабочий (проверил на Delphi 4 на DBDEMOS, слегка оптимизировав, разумеется), а все мои реплики, скажем так, "не в кассу"... :(
Единственное, что могу предложить в данной ситуации - убедиться, что ZMySqlQrelat используется лишь в представленном Вами обработчике...
P.S. Прислушайтесь к Val. Переходите на Lookup поля...
wik (2002-04-19 18:04:00) [2]У меня p1>0 всегда, т.к. это id.
Lusha (2002-04-19 17:56:00) [3]Нашел... Орисовка работает только для p1>0. Иначе FillRect (читай пустая ячейка)...
До понедельника...
wik (2002-04-19 17:45:00) [4]Конечно. Там же стоит
if DM.ZMySqlQrelat.Active=False then begin
pr_open(st1, DM.ZMySqlQrelat);
Конечно, если бы MySQL поддерживал вложенные запросы, этой проблемы просто не возникло бы. Но...
Lusha (2002-04-19 17:40:00) [5]Странно... Впрочем, если учесть, что Query открывается всего один раз... :)
wik (2002-04-19 17:34:00) [6]Спасибо за совет.
Скорость, как ни странно, прекрасная.query открывается только один раз, и фильтр работает гораздо быстрее чем select...where, особенно если поле неиндексировано.
Кстати, предыдущий совет не сработал.
Ячейки затираются даже в том случае, если их просто накрыть каким-нибудь окном.
Lusha (2002-04-19 17:24:00) [7]>wik (19.04.02 17:02)
Ну, так если внести изменения согласно Lusha © (19.04.02 16:48)...
Val (2002-04-19 17:07:00) [8]>Wik (19.04.02 14:12)
Знаете, не зря все так улыбаются-как у вас со скоростью при таком коде?
еще раз повторюсь-для отображения соответствующих ID значений из других таблиц нужно использовать лукап-поля либо соответствующие запросы в квери, выбирающие нужные значения по связям между таблицами.
А OnDrawColumnCell используют для чего нибудь попроще-например у вас в таблице поле принимает значения true или false(1 или 0), с помощью обработки этого события можно отобразить для пользователя "Да" либо "Нет" или что угодно еще.
wik (2002-04-19 17:02:00) [9]Lusha, я с благодарностью выслушаю Ваши замечания. Надо же когда-нибудь учиться писать по человечески.
Lusha (2002-04-19 16:48:00) [10]Основываясь на Вашем коде предположу, что грид в Вашей программе привязан к ZMySQLFirms... Если так, то следующая строка неверна...
try p1:=DM.ZMySqlQFirms.FieldByName("relat_id").Asinteger
И должна быть заменена на...
try p1:=TDBGrid(Sender).DataSource.DataSet.FieldByName("relat_id").Asinteger
Вообще у меня много чего есть сказать по этому коду... но я лучше промолчу... :)
Johnmen (2002-04-19 16:41:00) [11]Случай тяжелый...требует срочного хирургического вмешательства...:))))))))
wik (2002-04-19 16:32:00) [12]при входе на форму с гридом все в порядке.
procedure TFirmsF.DBGr1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var p1:integer;
s1,st1,s0:String;
begin
//---
Lusha (2002-04-19 16:05:00) [13]>wik (19.04.02 15:56)
К вашему сведению вместе с гридом у Вас создается объект TGridDataLink связанный с гридом... Он содержит буфер записей (равный количеству видимых в гриде строк) и грид отрисовывает содержимое ячеек исходя из значений этого буфера... Так что лично я не понимаю, что у Вас происходит...
P.S. Может все таки приведете пример кода?
Val (2002-04-19 16:03:00) [14]>wik (19.04.02 15:56)
так это в вопросе сказано так :)
а откуда вы берете значения для вписывания их вместо id?
wik (2002-04-19 15:56:00) [15]Val сказал правильно. Все вычисляемые ячейки очищаются кроме текущей записи. Что сделать, чтобы они не очищались?
Johnmen (2002-04-19 15:39:00) [16]Чего сделать-то ???????????????
wik (2002-04-19 15:29:00) [17]Извините, но я не совсем понял, как сделать. Можно примерчик пожалуйста?
Johnmen (2002-04-19 15:25:00) [18]Если все еще есть желание получить ответ, задавай вопрос так, чтобы все понимали ...
wik (2002-04-19 14:49:00) [19]Это как?
Val (2002-04-19 14:21:00) [20]Нужно для этого использовать либо запрос, либо лукап поля.
Так у вас происходит потому, что перерисовываются все ячейки, а значений для отображения не получают, кроме текущей.