Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2017, 14:31   #1
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию скрыть пустые столбцы в dbgrid

Всем привет)
Подскажите, как можно скрыть пустые столбцы в dbgrid?
делаю так:
Код:
if DT2.ADOQuery4.RecordCount<>0 then
for b := 0 to DT2.ADOQuery4.FieldCount-1 do begin
    if DT2.ADOQuery4.Fields[b].AsString='' then
    DT2.ADOQuery4.Fields[b].Visible:=False
    else
    DT2.ADOQuery4.Fields[b].Visible:=True;
    end;
if DT2.ADOQuery4.RecordCount=0 then
for b := 0 to DT2.ADOQuery4.FieldCount-1 do
    DT2.ADOQuery4.Fields[b].Visible:=True;

    DBGridEh4.Columns[0].Visible:=False;
    DBGridEh4.Columns[1].Visible:=False;
но из-за мощности моего компа, наверное, медленно работает.
Можно ли скрыть пустые поля ado через запрос select * ....?
Спасибо.
Ernest027 вне форума Ответить с цитированием
Старый 15.04.2017, 16:35   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

сколько же полей в твоем запросе ЕСЛИ
только перебор полей в ОДНОЙ записи замедляет работу.
Или мы видим не весь код а есть еще и перебор записей
( есть еще один цикл с ADOQuery4.Next; ) ?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 15.04.2017, 17:17   #3
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

Цитата:
Или мы видим не весь код а есть еще и перебор записей
( есть еще один цикл с ADOQuery4.Next; ) ?
Это весь код
Ernest027 вне форума Ответить с цитированием
Старый 15.04.2017, 18:17   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

весь код должен быть включен в какую-то процедуру.
уж не в таймер ли (обработчик OnTimer)?
или в какой-то обработчик рисования ?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 15.04.2017, 20:30   #5
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

вот полный код
Код:
procedure TForm1.DBGridEh4DrawDataCell(Sender: TObject; const [Ref] Rect: TRect;
  Field: TField; State: TGridDrawState);
 var
  b:Integer;
begin
if DT2.ADOQuery4.RecordCount<>0 then
for b := 0 to DT2.ADOQuery4.FieldCount-1 do begin
    if DT2.ADOQuery4.Fields[b].AsString='' then
    DT2.ADOQuery4.Fields[b].Visible:=False
    else
    DT2.ADOQuery4.Fields[b].Visible:=True;
    end;
if DT2.ADOQuery4.RecordCount=0 then
for b := 0 to DT2.ADOQuery4.FieldCount-1 do
    DT2.ADOQuery4.Fields[b].Visible:=True;

    DBGridEh4.Columns[0].Visible:=False;
    DBGridEh4.Columns[1].Visible:=False;
end;
Ernest027 вне форума Ответить с цитированием
Старый 15.04.2017, 20:32   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Что за идея - если при прорисовке записи поле не заполнено, то скрывать всю колонку. Что в других записях не важно, что ли? И вообще этот код срабатывает при прорисовке каждого поля по всем видимым записям
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 15.04.2017 в 20:35.
Аватар вне форума Ответить с цитированием
Старый 15.04.2017, 20:47   #7
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

Товарищи,я понимаю что рассуждая и критикуя вы хотите помочь. Но мне нужно именно так и прошу вас помочь с этим вопросом.
Ernest027 вне форума Ответить с цитированием
Старый 15.04.2017, 21:08   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
именно так
Ну и флаг в руки - именно так низзя
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.04.2017, 22:04   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
? И вообще этот код срабатывает при прорисовке каждого поля по всем видимым записям
более того из-за постоянного переключения видимости колонок он постоянно вызывает сам себя. вот из-за
этого "самовызова" и есть тормоза (точнее бесконечный цикл).

Проверять и устанавливать видимость надо не во время рисования а заранее, вероятнее всего после открытия. но для этого придется делать еще и цикл по всем записям.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 23.04.2017, 22:46   #10
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Вообще очень плохая идея с точки зрения пользователя. У него постоянно будет меняться набор столбов и при этом он не будет понимать почему и зачем. Логичнее дать пользователю выбор что он хочет видеть и дать возможность сохранения и загрузки настроек.
А и еще стоит отказаться от select * в пользу select то что надо показать.
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрыть пустые столбцы в dbgrid Ernest027 БД в Delphi 7 17.10.2016 19:09
Qt comboBox скрыть пустые строки _KUL Qt и кроссплатформенное программирование С/С++ 4 12.06.2012 17:47
Скрытие столбцы где есть пустые ячейки в таблице. jain_39 Microsoft Office Excel 7 06.06.2012 12:50
Скрыть пустые строчки макросом kzld Microsoft Office Excel 2 27.05.2010 06:52
скрыть столбцы allichka Microsoft Office Excel 9 17.02.2010 08:16