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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2013, 12:50   #1
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
Вопрос изменение цвета ячейки dbgrid(a)

Есть бд в аксесе, адоконекшин, адоквери, дата соурз и дбгрид. все работает нормально, нужно теперь закрасить ячейку в определенный цвет в зависимости от значения поля. Пробую в свойстве грида DrawColumnCell писать код
Код:
procedure TF_Main.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin


	if ((Column.FieldName ='status') and (Column.Field.AsString='geen'))then
  begin
	with  DBGrid1.Canvas do
	begin
		 DBGrid1.Canvas.Brush.Color := clGreen;
     DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
     DBGrid1.Canvas.Brush.Color := holdColor;
	end;
	end;
но ругается, если убрать в проверке Column.Field.AsString='geen' то закрашивает но все поля, как быть? defaultDrowing пробовал юзать тру и фолс не помогает, Есть ли еще метод закрасить ячейку, но что бы в другом событие например по нажатию кнопки(определенная ячейка меняет цвет)

вот код запроса
Код:
 try
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('SELECT * FROM Putt');
    ADOQuery1.Active:=True;
   except
    on e:Exception do
   end;
Konstantin_ua вне форума Ответить с цитированием
Старый 13.12.2013, 13:34   #2
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

что за ошибка?

попробуй вместо Column.Field.AsString вставить Column.Field.FieldName
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 13.12.2013, 13:56   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а если так написать?
Код:
procedure TF_Main.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin

  if ((Column.FieldName ='status') and (ВашДатаСет.FieldByName('status').AsString='geen')) then
  begin
 	 DBGrid1.Canvas.Brush.Color := clGreen;
 	 DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
 	 DBGrid1.Canvas.Brush.Color := holdColor;
  end;
где ВашДатаСет - это датасет, в котором находятся данные (ну который связан с DBGrid1)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.12.2013, 14:40   #4
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

Цитата:
а если так написать?
а если локейт будет на другой строке, то не закрасит
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 13.12.2013, 15:08   #5
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Цитата:
Сообщение от Toxa Посмотреть сообщение
что за ошибка?
https://www.dropbox.com/s/83ntiai7um...2013.07.53.png
Konstantin_ua вне форума Ответить с цитированием
Старый 13.12.2013, 15:15   #6
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а если так написать?
Код:
procedure TF_Main.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin

  if ((Column.FieldName ='status') and (ВашДатаСет.FieldByName('status').AsString='geen')) then
  begin
 	 DBGrid1.Canvas.Brush.Color := clGreen;
 	 DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
 	 DBGrid1.Canvas.Brush.Color := holdColor;
  end;
где ВашДатаСет - это датасет, в котором находятся данные (ну который связан с DBGrid1)
https://www.dropbox.com/s/hq28a6dkd0...2013.14.57.png
Konstantin_ua вне форума Ответить с цитированием
Старый 13.12.2013, 15:30   #7
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Код:
	if (Column.FieldName='status')then
   //if (ADOQuery1.FieldByName('status1').AsString='geen')then
  
 begin
	with  DBGrid1.Canvas do
	begin
		 DBGrid1.Canvas.Brush.Color := clGreen;
     DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
     DBGrid1.Canvas.Brush.Color := holdColor;
	end;
	end;
вот так закрашивает весь столбец ну мне нужно как то прикрепить то условие что закоментированно, может его где то в другом месте прописать?
Konstantin_ua вне форума Ответить с цитированием
Старый 13.12.2013, 15:38   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Toxa
а если локейт будет на другой строке, то не закрасит
возможно Вы ошибаетесь.

Konstantin_ua, проверяйте, как точно называются поля в таблице Putt. есть сомнение, что у Вас в ADOQuery1 нет поля Status ?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.12.2013, 15:56   #9
Konstantin_ua
Не судите строго
Форумчанин
 
Аватар для Konstantin_ua
 
Регистрация: 31.03.2011
Сообщений: 202
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
возможно Вы ошибаетесь.

Konstantin_ua, проверяйте, как точно называются поля в таблице Putt. есть сомнение, что у Вас в ADOQuery1 нет поля Status ?!
С полями все нормально, может я не там пишу сам запрос? если в теле события писать то начнет лагать страшно, пишу в форм криейте.
вот
https://www.dropbox.com/s/orwtjabn572kmbl/Ado.rar пасс 12345 лог админ

Последний раз редактировалось Konstantin_ua; 13.12.2013 в 16:00.
Konstantin_ua вне форума Ответить с цитированием
Старый 14.12.2013, 19:25   #10
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от Konstantin_ua Посмотреть сообщение
С полями все нормально, может я не там пишу сам запрос? если в теле события писать то начнет лагать страшно, пишу в форм криейте.
вот
https://www.dropbox.com/s/orwtjabn572kmbl/Ado.rar пасс 12345 лог админ
Я прошу прошения . На ваши проекте я нечего не понял. Но вот маленький пример ( Как покрасит строки ) по условие поля (Color) который мы Gride не отображаем


Код:
procedure TfrmMain.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
 if ADOQuery1.FieldByName('Color').AsCurrency = 1 then
     begin
      DBGrid1.Canvas.Brush.Color:=clAqua;
      DBGrid1.DefaultDrawColumnCell
      (Rect, DataCol, Column, State);
     end
   else
     if ADOQuery1.FieldByName('Color').AsCurrency = 2 then
       begin
         DBGrid1.Canvas.Brush.Color:= clYellow;
         DBGrid1.DefaultDrawColumnCell
         (Rect, DataCol, Column, State);
       end
     else
     if ADOQuery1.FieldByName('Color').AsCurrency = 3  then
       begin
        DBGrid1.Canvas.Brush.Color:= clLime;
        DBGrid1.DefaultDrawColumnCell
        (Rect, DataCol, Column, State);
       end
       else
     if ADOQuery1.FieldByName('Color').AsCurrency = 4  then
       begin
        DBGrid1.Canvas.Brush.Color:= clMoneyGreen;
        DBGrid1.DefaultDrawColumnCell
        (Rect, DataCol, Column, State);
       end;
end;

end.
Но если вам не ( Все строки ) и только ячейки . Посмотрю
Вложения
Тип файла: rar Color_DB.rar (390.2 Кб, 57 просмотров)
xxbesoxx вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение цвета ячейки по гипессылке Ayse Microsoft Office Excel 15 17.07.2013 10:46
Изменение цвета ячейки DBGridEh Dandy777 Общие вопросы Delphi 2 07.11.2012 14:46
Изменение цвета фона строки в DBGrid Ericnex БД в Delphi 6 30.08.2012 13:37
DBGrid изменение цвета ячейки S.T.U.D.E.N.T C++ Builder 6 24.04.2012 13:21
Изменение цвета ячейки содержащей формулу LexxSakhalin Microsoft Office Excel 7 07.09.2010 14:36