CftClub.ru
Клуб специалистов ЦФТ-Банк

Подкрашивание ячеек или колонок Grid'а
На страницу 1, 2  След.
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы
Предыдущая тема :: Следующая тема  
Автор Сообщение
san_light
Участник со стажем


Вступление в Клуб: 18.03.2011
СообщениеСр Мар 30, 2011 09:45   Подкрашивание ячеек или колонок Grid'а Ответить с цитатой
Полезность: Нет оценки
Доброго времени суток!
Кто знает, подскажите пож-та, как подкрасить ячейку или колонку грида? желательно без кода в клиент-скрипте. Заранее спасибо
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеСр Мар 30, 2011 10:50   Re: Подкрашивание ячаеек или колонок Grid'а Ответить с цитатой
Полезность: 1
san_light пишет:
Доброго времени суток!
Кто знает, подскажите пож-та, как подкрасить ячейку или колонку грида? желательно без кода в клиент-скрипте. Заранее спасибо

тут либо клиент скрипт.. либо CSMD... на мой взгляд клиент скрипт попроще будет.
_________________
всегда есть как минимум 2 выхода
san_light
Участник со стажем


Вступление в Клуб: 18.03.2011
СообщениеСр Мар 30, 2011 14:10   Re: Подкрашивание ячаеек или колонок Grid'а Ответить с цитатой
Полезность: Нет оценки
Alexsey пишет:
san_light пишет:
Доброго времени суток!
Кто знает, подскажите пож-та, как подкрасить ячейку или колонку грида? желательно без кода в клиент-скрипте. Заранее спасибо

тут либо клиент скрипт.. либо CSMD... на мой взгляд клиент скрипт попроще будет.

можете пример кода, если вам не трудно, а то че-то методом научного тыка не получается, а примеров найти не могу Sad
ggrey
Участник со стажем


Вступление в Клуб: 01.10.2007
СообщениеСр Мар 30, 2011 14:59    Ответить с цитатой
Полезность: 2
Как пример:

Код:

Public Sub ColorTheGrid
   lCol = ClientGrid.ColByQual("PLAN_LEVEL")
   For i = 1 To ClientGrid.Rows
      if ClientGrid.Value(i, lCol) > 75 Then
         ClientGrid.CellBackColor(i, 1, i, lCol) = 13*256*256+24*256+249
      else
         ClientGrid.CellBackColor(i, 1, i, lCol) = 0
      end if
   Next   
End Sub
budinva
Участник - экстремал


Вступление в Клуб: 15.01.2008
СообщениеСр Мар 30, 2011 15:11    Ответить с цитатой
Полезность: Нет оценки
посмотрите дистрибутивные раскрасски, например:
система - выполнение заданий по расписанию - Список заданий (color)

раскраска через "стиль ячеек", правда тут есть ограничение на длинну кода
budinva
Участник - экстремал


Вступление в Клуб: 15.01.2008
СообщениеСр Мар 30, 2011 15:12    Ответить с цитатой
Полезность: Нет оценки
посмотрите дистрибутивные раскрасски, например:
система - выполнение заданий по расписанию - Список заданий (color)

раскраска через "стиль ячеек", правда тут есть ограничение на длинну кода
san_light
Участник со стажем


Вступление в Клуб: 18.03.2011
СообщениеСр Мар 30, 2011 15:44    Ответить с цитатой
Полезность: Нет оценки
ggrey пишет:
Как пример:

Код:

Public Sub ColorTheGrid
   lCol = ClientGrid.ColByQual("PLAN_LEVEL")
   For i = 1 To ClientGrid.Rows
      if ClientGrid.Value(i, lCol) > 75 Then
         ClientGrid.CellBackColor(i, 1, i, lCol) = 13*256*256+24*256+249
      else
         ClientGrid.CellBackColor(i, 1, i, lCol) = 0
      end if
   Next   
End Sub

спасибо, завтра попробую.
san_light
Участник со стажем


Вступление в Клуб: 18.03.2011
СообщениеСр Мар 30, 2011 15:46    Ответить с цитатой
Полезность: Нет оценки
budinva пишет:
посмотрите дистрибутивные раскрасски, например:
система - выполнение заданий по расписанию - Список заданий (color)

раскраска через "стиль ячеек", правда тут есть ограничение на длинну кода

насколько я знаю - это справедливо для представлений (или я ошибаюсь?), а мне нужна раскраска в GRIDe на форме
san_light
Участник со стажем


Вступление в Клуб: 18.03.2011
СообщениеЧт Мар 31, 2011 13:56    Ответить с цитатой
Полезность: Нет оценки
san_light пишет:
ggrey пишет:
Как пример:

Код:

Public Sub ColorTheGrid
   lCol = ClientGrid.ColByQual("PLAN_LEVEL")
   For i = 1 To ClientGrid.Rows
      if ClientGrid.Value(i, lCol) > 75 Then
         ClientGrid.CellBackColor(i, 1, i, lCol) = 13*256*256+24*256+249
      else
         ClientGrid.CellBackColor(i, 1, i, lCol) = 0
      end if
   Next   
End Sub

спасибо, завтра попробую.

спасибо, все получилось Smile
san_light
Участник со стажем


Вступление в Клуб: 18.03.2011
СообщениеПт Апр 01, 2011 07:34    Ответить с цитатой
Полезность: Нет оценки
san_light пишет:
san_light пишет:
ggrey пишет:
Как пример:

Код:

Public Sub ColorTheGrid
   lCol = ClientGrid.ColByQual("PLAN_LEVEL")
   For i = 1 To ClientGrid.Rows
      if ClientGrid.Value(i, lCol) > 75 Then
         ClientGrid.CellBackColor(i, 1, i, lCol) = 13*256*256+24*256+249
      else
         ClientGrid.CellBackColor(i, 1, i, lCol) = 0
      end if
   Next   
End Sub

спасибо, завтра попробую.

спасибо, все получилось Smile

вот только проблема - перекрашивать грид надо по default-у и валидации, а также при удалении и добавлении строк (P_MESSAGE in ('BEFORE_GRID_ADD_ROW', 'BEFORE_GRID_DEL_ROW')), но отрабатывает только в первых двух случаях.
вот такой вот код
Код:

   if p_message in ('DEFAULT', 'BEFORE_GRID_ADD_ROW', 'BEFORE_GRID_DEL_ROW', 'VALIDATE') then
      v_summ := 0;
      rec_id := to_number(substr(p_info, instr(p_info, '[')+1, instr(p_info, ']') - instr(p_info, '[') - 1));
      for i in grid.first..grid.last
      where p_message <> 'BEFORE_GRID_DEL_ROW' or p_message = 'BEFORE_GRID_DEL_ROW' and i <> rec_id
      loop
         debug_pipe ('rec_id =  ' || rec_id, 0);
         debug_pipe ('i =  ' || i, 0);
         begin
            v_summ := v_summ + nvl(grid(i).[SUMM_KT], 0);
            -- Проверка наличия номера заявки на конвертацию
            if grid(i).[VALUTA_KT] = val_kt
                  and grid(i).[VALUTA_DT] <> grid(i).[VALUTA_KT]
                  and grid(i).[Z_CONV_NUM] is null then
               [CSMD].command(V_DEST_STR, 'Color_The_Grid ' || grid_name || ', "Z_CONV_NUM", ' || i ||', vbRed');
               null;
            else
               [CSMD].command(V_DEST_STR, 'Color_The_Grid ' || grid_name || ', "Z_CONV_NUM", ' || i ||', vbWindowBackground');
               null;
            end if;
         exception when NO_DATA_FOUND then
            null;
         end;
      end loop;
      -- Проверка соответствия сумм платежей сумме перевода
      debug_pipe ('v_summ =  ' || v_summ, 0);
      debug_pipe ('sum_kt_all =  ' || sum_kt_all, 0);
      if v_summ > sum_kt_all then
         [CSMD].command(V_DEST_STR, 'Color_The_Grid ' || grid_name || ', "SUMM_KT", 0, vbGreen');
      elsif v_summ < sum_kt_all then
         debug_pipe ('grid_name (vbRed) =  ' || grid_name, 0);
         [CSMD].command(V_DEST_STR, 'Color_The_Grid ' || grid_name || ', "SUMM_KT", 0, vbRed');
      else
         [CSMD].command(V_DEST_STR, 'Color_The_Grid ' || grid_name || ', "SUMM_KT", 0, vbWindowBackground');
      end if;
   end if;

все debug_pipe выводят то что и должно быть, но скрипт отрабатывает только кода P_MESSAGE = 'DEFAULT' или 'VALIDATE'
Код:

Sub Color_The_Grid(grid, col_name, row_id, color)
   lCol = grid.ColByQual(col_name)
   'msgbox(col_name) 'проверка
   if row_id > 0 then
            grid.CellBackColor(row_id, lCol, row_id, lCol) = color
      else
      For i = 1 To grid.Rows
         grid.CellBackColor(i, lCol, i, lCol) = color
      Next
   end if
End Sub

Почему? как решить? Заранее спасибо
ggrey
Участник со стажем


Вступление в Клуб: 01.10.2007
СообщениеПт Апр 01, 2011 09:13    Ответить с цитатой
Полезность: Нет оценки
Не понятно откуда у вас берутся события 'BEFORE_GRID_ADD_ROW', 'BEFORE_GRID_DEL_ROW'.
И в любом случае эти события должны передаваться в p_info, а не в p_validate.
ggrey
Участник со стажем


Вступление в Клуб: 01.10.2007
СообщениеПт Апр 01, 2011 09:23    Ответить с цитатой
Полезность: Нет оценки
Сейчас под рукой нет документации и системы ЦФТ-Банк, но насколько я помню событие добавления и удаления строк должно обрабатываться в клиент-скрипте, и я не уверен что они так же отражаются в серверном валидаторе.
san_light
Участник со стажем


Вступление в Клуб: 18.03.2011
СообщениеПт Апр 01, 2011 11:03    Ответить с цитатой
Полезность: Нет оценки
Прошу прощения за неполный код. Поясняю:
код, приведенный выше - это тело процедуры проверки, не подумал про заголовок
Код:

-- Проверка корректности грида (с подкрашиванием)
procedure GRID_CHECK_with_color(
         p_message         varchar2,
         P_INFO            varchar2,
         sum_kt_all ref      [SUMMA],
         val_kt ref         [FT_MONEY],
         grid_name          varchar2,
         grid in out         GRID_TABLE,
         V_DEST_STR in out    varchar2(32000)
         ) is
v_summ      [SUMMA];
rec_id      number;

Процедура вызывается из блока проверок, в p_message и P_INFO передаются соответствующие параметры p_message и P_INFO.
Значения p_message = 'BEFORE_GRID_ADD_ROW' и 'BEFORE_GRID_DEL_ROW' как раз и возникают после события, которое можно отловить в клиент-скрипте при добавлении и удалении записи грида.
Повторюсь - обработка происходит, но sub Color_The_Grid, вызываемый через [CSMD].command не выполняется (хотя при DEFAULT и VALIDATE отрабатывает все)


Последний раз редактировалось: san_light (Пт Апр 01, 2011 13:01), всего редактировалось 1 раз
ggrey
Участник со стажем


Вступление в Клуб: 01.10.2007
СообщениеПт Апр 01, 2011 11:43    Ответить с цитатой
Полезность: Нет оценки
Посмотрел доку, да действительно есть такие события и действительно передаются в серверный валидатор. Не очень понимаю как вам помочь в этой ситуации, на мой взгляд остается только смотреть отладку.
san_light
Участник со стажем


Вступление в Клуб: 18.03.2011
СообщениеПт Апр 01, 2011 12:58    Ответить с цитатой
Полезность: Нет оценки
ggrey пишет:
Посмотрел доку, да действительно есть такие события и действительно передаются в серверный валидатор. Не очень понимаю как вам помочь в этой ситуации, на мой взгляд остается только смотреть отладку.
спасибо, за попытку помочь.
что ж... жду еще советов
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы Часовой пояс: GMT + 3
На страницу 1, 2  След.
Страница 1 из 2

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru