Search Results for

    Show / Hide Table of Contents

    Интерактивные отчеты

    В интерактивных отчетах можно определить реакцию на щелчок мышью на том или ином объекте отчета в окне предварительного просмотра. Например, пользователь может щелкнуть мышью на строке данных и тем самым сформировать новый отчет с детальными данными по выбранной строке.

    Интерактивным можно сделать любой отчет. Для этого надо всего лишь создать обработчик для события TfrxReport.OnClickObject. Ниже приведен пример такого обработчика:

    Pascal:

    procedure TForm1.frxReport1ClickObject(Page: TfrxPage; View: TfrxView;
      Button: TMouseButton; Shift: TShiftState; var Modified: Boolean);
    begin
      if View.Name = 'Memo1' then
        ShowMessage('Memo1 contents:' + #13#10 + TfrxMemoView(View).Text);
      if View.Name = 'Memo2' then
      begin
        TfrxMemoView(View).Text := InputBox('Edit', 'Edit Memo2 text:', TfrxMemoView(View).Text);
        Modified := True;
      end;
    end;
    

    C++:

    void __fastcall TForm1::frxReport1ClickObject(TfrxView *Sender,
          TMouseButton Button, TShiftState Shift, bool &Modified)
    {
      TfrxMemoView * Memo;
      if(Memo =  dynamic_cast <TfrxMemoView *> (Sender))
      {
        if(Memo->Name == "Memo1")
          ShowMessage("Memo1 contents:\n\r" + Memo->Text);
        if(Memo->Name == "Memo2")
        {
          Memo->Text = InputBox("Edit", "Edit Memo2 text:", Memo->Text);
           Modified = true;
        }
      }
    }
    

    В обработчике OnClickObject вы можете делать следующее:

    • менять содержимое переданного в обработчик объекта или страницы (при этом надо выставить флаг Modified, чтобы учесть изменения);

    • вызывать метод TfrxReport.PrepareReport для построения отчета заново.

    В этом примере щелчок на объекте с именем Memo1 выведет сообщение с содержимым этого объекта. При щелчке на Memo2 выведется диалог, в котором можно поменять содержимое объекта. Установка флага Modified в True позволяет зафиксировать изменения и отобразить их на экране.

    Таким же образом можно определить другую реакцию на щелчок, например, формирование нового отчета. Здесь необходимо отметить следующее. В версии FastReport 3 один компонент TfrxReport может отображать отчет только в одном окне предварительного просмотра (в отличие от версии 2). Поэтому формировать новый отчет придется либо в отдельном объекте TfrxReport, либо в том же, но с затиранием текущего отчета.

    Для подсказки пользователю, на какие объекты можно щелкать мышью, удобно менять форму курсора при прохождении мыши над объектом. Для этого достаточно установить свойству Cursor у нужных объектов значение, отличное от crDefault. Это делается в дизайнере отчета.

    Еще один момент касается определения того, на каком объекте пользователь щелкнул мышью. В простых отчетах это можно определить по имени объекта или его содержимому. Однако это не всегда удается сделать в более сложных случаях. Например, необходимо сформировать детальный отчет по выбранной строке данных. Пользователь щелкнул на объекте Memo1 с содержимым '12'. К какой строке данных относится этот объект? Для этого нужно знать первичный ключ, который однозначно идентифицирует эту строку. FastReport позволяет сопоставить каждому объекту отчета строку, содержащую любые данные (в нашем случае - данные первичного ключа). Эта строка хранится в свойстве TagStr.

    Рассмотрим это на примере отчета, который входит в демо FRDemo.exe - 'Simple list'. Это список клиентов некоторой фирмы - имя клиента, адрес, контактное лицо и пр. Источник данных - таблица Customer.db из демонстрационной базы DBDEMOS. У этой таблицы есть первичный ключ - поле CustNo, которое в отчете не присутствует. Наша задача - по щелчку на любом объекте из сформированного отчета определить, к какой записи он относится, т.е. узнать значение первичного ключа. Для этого достаточно занести в свойство TagStr всех объектов, которые лежат на бэнде Master Data, следующее значение:

    [Customers."CustNo"]
    

    Во время формирования отчета содержимое свойства TagStr вычисляется таким же образом, как и содержимое текстовых объектов, т.е. вместо всех переменных подставляются их значения. Переменная в данном случае - это то, что заключено в квадратные скобки. Поэтому после формирования отчета в свойстве TagStr объектов, лежащих на Master Data, будут содержаться строки типа '1005', '2112' и т.д. Простое преобразование из строки в число даст нам значение первичного ключа, по которому можно найти нужную запись.

    Если первичный ключ составной, т.е. содержит несколько полей, то содержимое свойства TagStr может быть следующим:

    [Table1."Field1"];[Table1."Field2"]
    

    После построения отчета свойство TagStr будет содержать значения типа '1000;1', из которых также нетрудно извлечь значения ключа.

    Back to top © 1998-2024 Copyright ООО «Быстрые отчеты»