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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2010, 20:54   #1
Марк Охман
Форумчанин
 
Аватар для Марк Охман
 
Регистрация: 05.02.2010
Сообщений: 153
Восклицание правка данных в DBGrid

Привет) очень нужна помощь. у меня через adoconnection с dbgrid связана база. в одной из таблиц (которая собственно и отображается на dbgrid) число столбцов не фиксировано, т.е. они могут добавляться в зависимости от соответствующей команды. первые пять столбцов стабильны, т.е они существуют всегда. а вот в шестом к примеры (6 и другие до конца). в ячейке находится цифра и две буквы(10 ТД). Так таблица выглядит в оригинале. Но мне нужно чтобы во всех столбцах начиная с 6-го текст в ячейке окрашивался в цвет, соответствующий двум буквам после цифры (напр. если ТД - зеленый, РК - красный, ЗО - желтый и т.д.) Я не могу понять как их перебирать. Подскажите плиз! Заранее спасибо.
Я начинающий web-программист) Не судите строго, плиз! Буду очень стараться!
Марк Охман вне форума Ответить с цитированием
Старый 03.11.2010, 21:02   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Поиск по форуму для кого сделан ?
http://www.programmersforum.ru/showthread.php?t=61862
mihali4 вне форума Ответить с цитированием
Старый 03.11.2010, 22:16   #3
Марк Охман
Форумчанин
 
Аватар для Марк Охман
 
Регистрация: 05.02.2010
Сообщений: 153
По умолчанию

мне нужно выделить одну конкретную ячейку. не могу врубиться в той теме как это сделать. подскажите пожалуйста)
Я начинающий web-программист) Не судите строго, плиз! Буду очень стараться!
Марк Охман вне форума Ответить с цитированием
Старый 03.11.2010, 22:31   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Будем использовать событие "ondrawcolumncell". Следующий пример раскрашивает ячейки колонки "status" когда значение не равно "a".
Код:
procedure tform1.dbgrid1drawcolumncell(sender: tobject; const rect: trect; 
datacol: integer; column: tcolumn; 
state: tgriddrawstate); 
const 
clpalegreen = tcolor($ccffcc); 
clpalered = tcolor($ccccff); 
begin 

if column.fieldname = 'status' then //Удалите эту линию, если хотете закрасить целую линию 

if column.field.dataset.fieldbyname('status').asstring <> 'a' 
then 
if (gdfocused in state) //имеет ли ячейка фокус? 
then dbgrid1.canvas.brush.color := clblack //имеет фокус
else dbgrid1.canvas.brush.color := clpalegreen; //не имеет фокуса

//Теперь давайте закрасим ячейку используя стандартный метод: 
dbgrid1.defaultdrawcolumncell(rect,datacol,column,state) 
end;
Вот и всё.
mihali4 вне форума Ответить с цитированием
Старый 03.11.2010, 23:03   #5
Марк Охман
Форумчанин
 
Аватар для Марк Охман
 
Регистрация: 05.02.2010
Сообщений: 153
По умолчанию

почему то только первую ячейку записи окрашивает, а остальные нет. ???
Я начинающий web-программист) Не судите строго, плиз! Буду очень стараться!
Марк Охман вне форума Ответить с цитированием
Старый 03.11.2010, 23:21   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Увы, кроме покупки аппарата "VipryamitelRuk" я уже ничего посоветовать не могу.
Код абсолютно рабочий...
mihali4 вне форума Ответить с цитированием
Старый 04.11.2010, 10:28   #7
Марк Охман
Форумчанин
 
Аватар для Марк Охман
 
Регистрация: 05.02.2010
Сообщений: 153
По умолчанию

обязательно поищу такой)))

вот мой код:
Код:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
AdoQuery1.First;
for i:=5 to AdoQuery1.FieldCount do
   for j:=1 to AdoQuery1.RecordCount do
    begin
      if column.fieldname = DBGrid1.Columns.Items[i].DisplayName then
       begin
       s:=AdoQuery1.Fields.FieldByNumber(i).AsString;
        if (s[1]='Р') then
         if (gdfocused in state) 
            then dbgrid1.canvas.brush.color := clblack 
            else dbgrid1.canvas.brush.color := clgreen;
        dbgrid1.defaultdrawcolumncell(rect,datacol,column,state);
        end;
    AdoQuery1.Next;
    end;
выдает ошибку,что
EListError with message 'List index out of bounds (6)'
в чем может быть дело??
в той таблице, кстати 6 солбцов.
Я начинающий web-программист) Не судите строго, плиз! Буду очень стараться!

Последний раз редактировалось Марк Охман; 04.11.2010 в 10:37.
Марк Охман вне форума Ответить с цитированием
Старый 04.11.2010, 11:02   #8
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Что-то несуразное ты написал... Причем здесь циклы?
Михалыч же написал правильный код.
_SERGEYX_ вне форума Ответить с цитированием
Старый 04.11.2010, 11:18   #9
Марк Охман
Форумчанин
 
Аватар для Марк Охман
 
Регистрация: 05.02.2010
Сообщений: 153
По умолчанию

просто у меня он проверяет все ячейки таблицы. названия столбцов неизвестны, т.е. нужно перебрать значения всех ячеек во всех столбцах и окрасить их (ячейки) в соответствующий цвет.
простите если я не догоняю)))
Я начинающий web-программист) Не судите строго, плиз! Буду очень стараться!
Марк Охман вне форума Ответить с цитированием
Старый 04.11.2010, 11:58   #10
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Давай по порядку... У тебя кроме букв в ячейке еще и цифры.
После цифр перед буквами стоит пробел. За это и зацепимся...
Принцип такой...
Код:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if DataCol > 5 then  //начинаем окрашивать с 6-го столбца
  begin
    with DBGrid1.Canvas do
    begin
{Если в ячейке есть пробел и за ним большими буквами ТД, 
то окрашиваем в зеленый и т.д.}
    if Pos(' ТД',Column.Field.Text) > 0  then  Brush.Color := clGreen;
    if Pos(' РК',Column.Field.Text) > 0  then  Brush.Color := clRed;
    if Pos(' ЗО',Column.Field.Text) > 0  then  Brush.Color := clYellow;
    end;
    DBGrid1.Defaultdrawcolumncell(Rect,Datacol,Column,State)
  end;
end;
_SERGEYX_ вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правка hosts kroŧ Общие вопросы Delphi 6 28.06.2010 09:46
Правка готовой курсовой на СИ++ Inpush Фриланс 2 17.02.2010 19:06
перенос данных из DBGrid в DBGrid KingSize БД в Delphi 17 24.04.2009 09:30
Правка-Найти пробелы ZORRO2005 Microsoft Office Excel 2 06.10.2007 01:47