powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как раскрасить DBGrid по условию ?
25 сообщений из 33, страница 1 из 2
Как раскрасить DBGrid по условию ?
    #39700665
Sensor230
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На форме DBGrid, отображение четез DataSource1-ADOQuery1, в таблице есть два поля с датами (1-Дата создания заявки, 2- дата до которой заявка должна быть выполнена). Как мне раскрасить автоматически DBGrid по условию: ЕСЛИ (ДАТА2 -(Data(сейчас))<2 ТО СТРОЧКА ЖЕЛТАЯ, ЕСЛИ (ДАТА2 -(Data(сейчас))>5 ТО СТРОЧКА ЗЕЛЕНАЯ, ЕСЛИ (ДАТА2 -(Data(сейчас))<0 ТО СТРОЧКА КРАСНАЯ.
Что то типа напоминалки, только в DBGride и по цветам. Если до ококнчания срока выполнения заявки больше 5 дней заявка -зеленая, если меньше двух дней -заявка желтая, прозевал срок -заявка красная.
Спасибо! Вы крутые!!! )))
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39700667
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39700670
Sensor230
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Я это видел и оно не совсем подходит. Разукрасить строчки в зависимости от того, что написано в ячейке вопросов не вызывает. Мозги кипят, а вот как разрисовать не по данным в записи, а по результатам манипуляций этими данными - не складывается.
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39700675
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sensor230,

Так же, как и написано в условии:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
d1, d2: TDate;

d1 := dataset.FieldValues['date1'];
d2 := dataset.FieldValues['date2'];

if (d2 - d1 > 5) then
begin
...
end
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39700678
Sensor230
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JaDi, что не так? пару раз коряво, но запустилось, а теперь вылетает при присвоении значения переменной d2.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var d1, d2: TDateTime;
begin
if (ADOQuery1.FieldByName('Статус').AsString ='В работе') then begin
 DBGrid1.Canvas.Brush.Color:=clLime;
  DBGrid1.Canvas.FillRect(rect);
  DBGrid1.Canvas.TextOut(Rect.Left,Rect.Top,Column.Field.AsString);
end;
if (ADOQuery1.FieldByName('Статус').AsString ='В очередь') then begin
  DBGrid1.Canvas.Brush.Color:=clSilver;
  DBGrid1.Canvas.FillRect(rect);
  DBGrid1.Canvas.TextOut(Rect.Left,Rect.Top,Column.Field.AsString);
end;
Label39.Caption := IntToStr(ADOQuery1.RecordCount);
d1 := Date();
d2:=ADOQuery1.FieldValues ['Дата'];
if ((d2 - d1) > 5) then begin
DBGrid1.Canvas.Brush.Color:=clRed;
DBGrid1.Canvas.FillRect(rect);
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39700680
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sensor230,

ошибку надо сюда копипастить... Возможно, речь о том, что в поле с датой не везде заполнено, тогда перед присвоением надо проверять значение на Null.
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39700684
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39701108
Sensor230
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JaDi , Точно!!! Поле с датой выполнения добавлено позже к рабочей БД и на ранних заявлениях поля пустые , ща буду пробывать. JaDi , спасибо!!! Не знаю кто ты, но ты крут!!! ))))
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39701109
Sensor230
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gator, Большое спасибо, есть много чего вытащить из не ломая голову и экономя время.
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39701118
Sensor230
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JaDi,
Что то не клеиться скриншот с ошибкой
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39701126
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sensor230,

ошибка в том, что в поле пустое значение (null -- незаполнено). Прежде, чем получать его значение, надо проверь на <> Null -- как писал выше.
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39701140
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var d1, d2: Variant;
    S: string;
begin
  S := ADOQuery1['Статус'];
  if S = 'В работе' then DBGrid1.Canvas.Brush.Color:=clLime else
  if S = 'В очередь' then DBGrid1.Canvas.Brush.Color:=clSilver;
  DBGrid1.Canvas.FillRect(Rect);
  DBGrid1.Canvas.TextOut(Rect.Left,Rect.Top,Column.Field.AsString);
  d1 := Date();
  d2 := ADOQuery1['Дата'];
  if VarIsNull(d2) then Exit;
  if (d2 - d1) > 5 then DBGrid1.Canvas.Brush.Color:=clGreen else
    if (d2 - d1) < 2 then DBGrid1.Canvas.Brush.Color:=clYellow else
    if (d2 - d1) < 0 then DBGrid1.Canvas.Brush.Color:=clRed;
  DBGrid1.Canvas.FillRect(rect);
end;
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39701146
Sensor230
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Новые записи автоматически заполняют это поле, а к старым или вручную допишу или удалю их совсем -это что касаемо ошибки. Попробовал так: Очистил всю БД и создал 2 заявки с разными сроками, ошибка как ты и сказал исчезла, но получается что то не то от слова совсем... Красит или весь DBGrid или ни чего, при чем граница разделения по "0".
и еще если вывести результат в d2-d1 в лейбл или DateTimePicker для кoнтроля= хрень какая то получается... Пробывал
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39701149
Sensor230
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr , Спасибо за готовый код, вот посидишь тут, а потом ложишься спать и пол ночи уснуть не можешь потому, что чуствуешь себя полным лошарой среди профи ))))). Твой код красит весь грид в желтый цвет в не зависимости от разницы дат то ли 1 день, то ли 100 то ли просрочено.
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39701172
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDiПрежде, чем получать его значение, надо проверь на <> Null -- как писал выше.
На <> Null не стоит проверять ничто и никогда

DimaBr
Код: pascal
1.
2.
3.
  if (d2 - d1) > 5 then DBGrid1.Canvas.Brush.Color:=clGreen else
    if (d2 - d1) < 2 then DBGrid1.Canvas.Brush.Color:=clYellow else
    if (d2 - d1) < 0 then DBGrid1.Canvas.Brush.Color:=clRed;


Из всего написанного мне наиболее интересно, как Вы сконструируете тестовый пример, в котором будет задействован clRed.
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39701249
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer> как Вы сконструируете тестовый пример, в котором будет задействован clRed.

Да, смешной косяк. :) Хотя на самом деле достаточно поменять местами два последних if-a.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39701352
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамХотя на самом деле достаточно поменять местами два последних if-a.
Это не уберёт вопроса "что будет при d2 = 5, d1 = 2" и ряда других к этому коду. Я бы сказал, что это пример спагетти, только не в коде, а в мыслях в тот момент, когда рождался этот код.
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39701400
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё согласно тех заданию
авторЕСЛИ (ДАТА2 -(Data(сейчас))<2 ТО СТРОЧКА ЖЕЛТАЯ, ЕСЛИ (ДАТА2 -(Data(сейчас))>5 ТО СТРОЧКА ЗЕЛЕНАЯ, ЕСЛИ (ДАТА2 -(Data(сейчас))<0 ТО СТРОЧКА КРАСНАЯ.
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39701436
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer> Это не уберёт вопроса "что будет при d2 = 5, d1 = 2" и ряда других к этому коду.

На этот счёт в ПЗ/ТЗ ничего не сказано. :) Так что вопросы
(уточнения) должны быть не к коду, а ещё до его появления.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39701440
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамНа этот счёт в ПЗ/ТЗ ничего не сказано. :) Так что вопросы (уточнения) должны быть не к коду, а ещё до его появления.
Безусловно. Тот, кто кодирует, должен был бы остановиться и задать эти вопросы постановщику. Чего мы не увидели.

Вы, конечно, можете спросить, почему я прицепился именно к коду, а не к исходной реплике. Отвечу: потому что спрашивающий имеет моральное право не знать/не уметь, а вот к отвечающему требования, имхо, выше. Дать плохой ответ - хуже, чем не дать никакого. Поэтому я счёл целесообразным привлечь внимание к вопросу именно таким образом.
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39701525
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sensor230А мне видимо так и придется ходить с нераскрашеным гридом (вернее раскрашенным по статике ячеек, а не как хотелось).
Кто мешает раскрасить как хотелось ?
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39701600
Sensor230
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr,
Отсутствие опыта... Да, точно нашел нужное оправдание )))), надо теперь в диаппазоны лезть, а то так получается что например 1 и меньше 5 и меньше 2, и еще результат вычитания дат представляется числовым эквивалентом почемуто,.. Но я над этим работаю ))))
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39701780
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sensor230, перпиши ИФы на КЕЙС - нагляднее будет
Код: pascal
1.
2.
3.
4.
5.
6.
7.
case (D2-D1) of
  > 5: curColor := clGreen;
  < 0: curColor := clRed;
  < 2: curColor := clYellow // just one & zero;
  else curColor := clCyan;
end;
DBGrid1.Canvas.Brush.Color := curColor; 
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39701822
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GatorSensor230, перпиши ИФы на КЕЙС - нагляднее будет
Код: pascal
1.
2.
3.
4.
5.
6.
7.
case (D2-D1) of
  > 5: curColor := clGreen;
  < 0: curColor := clRed;
  < 2: curColor := clYellow // just one & zero;
  else curColor := clCyan;
end;
DBGrid1.Canvas.Brush.Color := curColor; 



В case нельзя задавать условия, тем более пересекающиеся...
...
Рейтинг: 0 / 0
Как раскрасить DBGrid по условию ?
    #39702156
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zinpub,
напиши диапазоны, делов-то...
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как раскрасить DBGrid по условию ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]