Cross отчет, связь с базой

отредактировано 18:20 Раздел: FastReport 4.0
в кросс отчете поле должно менять цвет в зависимости от значения поля базы данных frxDBDataSet1, само это поле в кросс отчет не вставляется. Вставляю в скрипт
procedure DBCross1Cell0OnBeforePrint(Sender: TfrxComponent);
begin
if <frxDBDataSet1."Inspector">=' ' then DBCross1Object2.Color := clRed
else DBCross1Object2.Color := clWhite
end;
и вижу отладчиком, что frxDBDataSet1."Inspector" значение не меняет, похоже что база не листается вместе с кросс отчетом
т.е. связи нет
как поступить?
спасибо

Комментарии

  • отредактировано 18:20
    не может быть, чтобы ни у кого не возникало потребности изменять атрибуты ячейки в кросс отчете в зависимости значения другого поля базы данных.
    Ау!
    спасибо :)
  • RhinoFCRhinoFC Новосибирск
    отредактировано 18:20
    Zajigaev написал: »
    не может быть, чтобы ни у кого не возникало потребности изменять атрибуты ячейки в кросс отчете в зависимости значения другого поля базы данных.
    Ау!
    спасибо :)

    Ну, к сожалению, я до конца помочь здесь не смогу. У меня как раз такой потребности не возникало. Да и с кроссами работаю очень редко. Но кое-что могу сказать, может поможет.
    Кросс строится таким образом:
    1) Открывается датасет
    2) Строится матрица значений. Здесь идёт пробег по датасету.
    3) Рисуется кросс-таб по подготовленной матрице. Здесь уже датасет не юзается.

    Таким образом, когда кросс-таб печатается, датасет уже не используется. Курсор стоит себе спокойненько на какой-то записи и всё. Так что надо изыскивать какие-то другие пути для решения этой проблемы.
  • отредактировано 18:20
    Возник подобный вопрос, тоже пока ничего не могу придумать. Ячейка должна окрашиваться в зависимости от нахождения строки в таблице, не участвующей в кросс отчете. те нужно как то сделать окрашивание ячейки в зависимости от результатов запроса. Например
    если select count(id) from spisok_form_n where client= :) строка кросс отчета) and name_form = :) столбец кросс отчета)
    то ячейка окрашивается
  • отредактировано 18:20
    У меня такая проблема возникла некотрое время назад, решил следующим образом:
    procedure Tr_DBCrossOnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant);
    begin                                                 
      if (ColumnIndex < N1) and (RowIndex < N1) then
        begin              
          if ColumnIndex = RowIndex then
            Memo.Color := clTeal;
          if Value <> Null then                                                                      
            begin
              if (a_Sq[N1 * ColumnIndex + RowIndex] > 0) and             
                 (a_Sq[N1 * RowIndex + ColumnIndex] > 0) then
                   Memo.Color := $aaeebf;                                           
              if (a_Sq[N1 * ColumnIndex + RowIndex] = 0) and
                 (a_Sq[N1 * RowIndex + ColumnIndex] = 0) then
                   Memo.Color := $96f1f6;                                           
              if (a_Sq[N1 * ColumnIndex + RowIndex] < 0) and
                 (a_Sq[N1 * RowIndex + ColumnIndex] < 0) then
                   Memo.Color := $d7d7ff;      
            end;                                    
        end;                                                 
    end;
    
    Вариантный одномерный массив a_Sq передаю из самого Дельфи следующим образом:
    var  a_Sq_Var: variant; 
    // Подготовка для печати
    begin    
       a_Sq_Var := VarArrayCreate([0, N1 * N1 - 1], varShortint);
        k := 0;
        l := 0;
        for j := 0 to N1 * N1 - 1 do
          begin
            a_Sq_Var[j] := a_Sq[k, l];   
            Inc(l);                      
            if l = N1 then            
              begin                     
                l := 0;
                Inc(k);
              end;
          end;
       PrintReport.Script.Variables['a_Sq'] := a_Sq_Var;
    end;
    
    Ищите и обрящете! :)

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.