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

Вниз

Оперативная перерисовка DBGrid а   Найти похожие ветки 

 
Johnmen   (2002-04-11 11:05) [0]

Имеется следующий обработчик :
procedure TForm1.XXXDataSet1AfterScroll(DataSet: TDataSet);
begin;
DBGrid1.Columns[x].Visible:=not DBGrid1.Columns[x].Visible;
end;

Если навигация осуществляется с помощью указанного грида, то ожидаемого эффекта не наблюдается...
Кто подскажет красивое решение проблемы ?
Благодарю заранее...


 
alexandr   (2002-04-11 11:17) [1]

прикольно как это: на четных записях столбец есть, на нечетных нет?


 
Lusha   (2002-04-11 11:18) [2]

>Johnmen ©
>Если навигация осуществляется с помощью указанного грида, то ожидаемого эффекта не наблюдается...

А ведь должен наблюдаться... Проблемка в коде...


 
Fareader   (2002-04-11 11:18) [3]

А если не секрет, то какой ожидаемый эффект ? :)


 
Johnmen   (2002-04-11 11:25) [4]

>alexandr © : это всего лишь абстрактный пример.
>Lusha © : если, например, навигация в др.гриде, связанном с тем же НД, то перерисовывается. Проблемка в каком коде ?
>Fareader © : колонка то появляется, то исчезает при смене текущей записи.


 
Lusha   (2002-04-11 11:34) [5]

Именно навигация в гриде DBGrid1 тоже должна приводить к перерисовке (в данном коде появлению - исчезанию колонки). В каком коде? В коде программы, разумеется. Я набросал постенький пример TDataSet + TDataSource + TDBGrid + TDBNavigator. Указанный Вами обработчик, мсрабатывает и как при навигации посредством TDBNavigator, так и при навигации посредстыом TDBGrid... Или я чего то не понял?


 
Johnmen   (2002-04-11 11:41) [6]

>Lusha © :
1. Предлагаю быть попроще и перейти на ты.
2. Понял правильно. Добавлю, что юзается простенькая тестовая табличка из IB базы, поля НД прописаны статично, колонки грида прописаны статично.


 
Lusha   (2002-04-11 11:45) [7]

Словил... Подумаю... :)


 
Lusha   (2002-04-11 12:41) [8]

Нда-а-с. Вообще это смахивает на глюк. Если колонки явно не заданы в design Time - все работает...

Попробуй такой код...

type
TMyGridColumns = class(TDBGridColumns);

...

DBGrid1.Columns[х].Visible := not DBGrid1.Columns[х].Visible;
TMyColumns(DBGrid1.Columns).Update(DBGrid1.Columns[х]);




 
Johnmen   (2002-04-11 14:05) [9]

>Lusha © (11.04.02 12:41) :
Спасибо за проявленное участие !
Как всегда идет борьба с особенностями или/и с глюками !
Пробовал не задавать колонок в дизайне - тишина....
А вот этот твой вариант латания
TMyColumns(DBGrid1.Columns).Update(DBGrid1.Columns[х]);
работает в обоих случаях !
Я же решал эту проблему извратом, типа
DBGrid1.Columns[х].Width := DBGrid1.Columns[х].Width;
причем если колонок изменяющих видимость несколько, то надо делать для всех (и в твоем варианте и в моем) !

Еще раз спасибо !

>All : Если кто предложит еще варианты - буду рад !


 
Lusha   (2002-04-11 14:25) [10]

Johnmen ©
>Пробовал не задавать колонок в дизайне - тишина....
Живу на Delphi4. Если в Design Time колонки не определены - все работает корректно. Если бы ты не сказал что "колонки грида прописаны статично" мы бы друг друга не поняли... :)


 
Твой Малдер   (2002-04-11 14:26) [11]

...Кстати, аналогичная проблема перерисовки грида возникает и при изменении количества доступных записей в НД, напр.при установке фильтра...


 
Johnmen   (2002-04-11 14:41) [12]

Твой Малдер <=> Johnmen (в данном случае)/забыл обновить имя/

>Lusha © : Выясняются интересные вещи - в D4 глюка почти нет, а в D5, D6 - уже совсем есть ! (в случае неопределенности колонок)
Будет время - покопаюсь в исходниках...


 
Johnmen   (2002-04-11 16:17) [13]

Господа ! Скиньте сюда, у кого есть, процедуру отработки
TDBGridColumns.Update от D4, будьте любезны !


 
Lusha   (2002-04-11 16:23) [14]

>Johnmen ©
Не надо. Я был не прав. Этот эффект присутствует и у Delphi4. Я его просто благополучно прощелкал. И не глюк это, как выясняется, а обычная фича. Причина (на мой взгляд) обработчик мыши. Клик мыши в ячейке восприниматься как выбор ячейки (записи), а если она при этом пропадает...

С TDBGridColumns.Update все нормально и прозрачно... Проверь как работает обработчик OnAfterScroll при перемещении посредством клавиатуры - все ОК. Грабли только на мыши...


 
Johnmen   (2002-04-11 16:33) [15]

>Lusha © : Проверил, увы - грабли везде (что мыша, что клава) :)


 
Lusha   (2002-04-11 16:50) [16]

>Johnmen ©
Все тщательно (первый раз за день :) ) проверил. Не работает именно перемещение в гриде посредством мыши. Нашел где грабли в обработчике MouseDown и успокоился на счет Delphi4...

>Проверил, увы - грабли везде (что мыша, что клава) :)
Верю... Проверил на Builder5. Действительно грабли... :(
Что касается обработчика TDBGridColumns.Update, то они идентичны в Delphi4 и Delphi5... Ищу разницу...


 
Lusha   (2002-04-12 10:48) [17]

Я сравнил модули dbgrids от delphi4 и delphi5 (из поставки CBuilder5). Результат сравнения могу выслать...

С подобного рода граблями я столкнулся когда общался с бета версией Delphi3. Там была куча глюков в BDGrid. Я их пофиксил, а когда вышла официальная версия, то никаких особых исправлений я в новой версии модуля так и не обнаружил... Самое смешное, что стоило установить модуль dbgrids от бета версии (оригинальный) и грид снова начинал глючить и в официальной версии... Я не стал разбираться и забил...

P.S. Если что найдешь, сообщи...


 
Johnmen   (2002-04-12 10:52) [18]

>Lusha © : Да-да, вышли, пожалуйста, dbgrids от delphi4 и Результат сравнения !



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

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

Наверх




Память: 0.51 MB
Время: 0.016 c
14-17702
Alx2
2002-03-28 10:24
2002.05.06
Ветка о русском языке нашла продолжение в правительстве


14-17703
Roach
2002-03-18 12:26
2002.05.06
Games


7-17707
Костя
2001-11-16 22:29
2002.05.06
Мониторинг COM порта


1-17524
4D man
2002-04-19 16:45
2002.05.06
OpenDialog


4-17742
Пастор
2002-03-02 22:33
2002.05.06
API Controls Library