M Y D E L P H I 7 . R U Самоучитель программирования  
 
  • Главная
  •  

     

    Компонент TRvDataSetConnection

    Компонент TRvDataSetConnection позволяет отчету получить доступ к наборам данных, инкапсулированных в любых компонентах, произошедших от класса TDataSet. Это открывает перед разработчиком самые широкие возможности по созданию отчетов для любых приложений баз данных и распределенных приложений.

    Сразу после переноса на форму компонент становится доступным в визуальной среде Rave Reports при создании объекта прямого просмотра. Однако толк от ненастроенного соединения пока небольшой. Сначала его нужно связать с компонентом набора данных. Для этого предназначено свойство

    property DataSet: TDataSet;

    И это все. Теперь созданный в визуальной среде объект прямого просмотра автоматически получит объекты полей, соответствующие полям в наборе данных компонента DataSet.

    Впрочем, еще несколько вспомогательных свойств могут дать разработчику дополнительные удобства.

    Примечание 

    Здесь мы рассмотрим только часть свойств и методов. Компонент TRvDataSetConnection обладает большой группой свойств и методов, которые, будучи использованы в методах-обработчиках событий, позволяют дополнительно оформлять отчет. Более детально эти свойства и методы рассматриваются ниже в разд. "Компонент TRvCustomConnection" данной главы.

    Свойство

    property FieldAliasList: TStrings;

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

    Методы-обработчики событий компонента отслеживают процесс навигации по набору данных при печати отчета.

    При открытии соединения для создания отчета генератором отчетов вызывается метод-обработчик

    type

    TRPConnectorEvent = procedure(Connection: TRvCustomConnection); 

    property OnOpen: TRPConnectorEvent;

    При открытии соединения отчет требует передать ему информацию о структуре набора данных (метаданные). Компонент соединения делает это и вызывает метод-обработчик

    property OnGetCols: TRPConr.ectorEvent;

    Когда курсор устанавливается на первую строку набора данных, вызывается метод-обработчик

    property OnFirst: TRPConnectcrEvent;

    а при перемещении на следующую запись можно использовать метод

    property OnNext: TRPConnectorEvent;

    Если генератор отчетов нашел нужную запись и считал ее для представления в отчете, для отслеживания этого события разработчик может использовать метод

    property OnGetRow: TRPConnectorEvent;

    При достижении последней записи набора вызывается метод-обработчик

    type

    TRPEOFEvent = procedure(Connection: TRvCustomConnection; var Eof: Boolean); 

    property OnEOF: TRPEOFEvent;

    При повторном использовании набора данных, например при печати отчетов "один-ко-многим" или при группировке записей, соединение обновляется. При этом все параметры соединения и набора данных приводятся к исходному состоянию и вызывается метод-обработчик

    property OnRestore: TRPConnectorEvent;

    Кроме этого, при печати сложных отчетов генератору отчетов может понадобиться некоторое подмножество отсортированных записей набора данных.

    Перед началом сортировки и фильтрации и после их завершения вызываются пары методов-обработчиков

    property OnGetSort: TRPConnectorEvent;

    property OnSetSort: TRPConnectorEvent;

    И

    property OnGetFilter: TRPConnectorEvent; 

    property OnSetFilter: TRPConnectorEvent;

    Однако вы можете обеспечить дополнительную фильтрацию записей, передаваемых из набора данных в отчет. Для этого используется метод-обработчик

    type

    TRPValidateRowEvent = procedure(Connection: TRvCustomConnection;

    var ValidRow: Boolean);

    property OnValidateRow: TRPValidateRowEvent;

    Параметр ValidRow управляет отправкой отдельной записи отчету: при значении True запись пропускается в отчет.

    Рассмотрим простой пример. Для отчета, печатающего всем нам хорошо известную таблицу COUNTRY из демонстрационной базы Delphi, можно ограничить список стран, а также исключить страны с площадью территории, меньше заданной:

    procedure TForml.RvSomeConValidateRow(Connection: TRvCustomConnection;

     var ValidRow: Boolean); 

    begin

    with TRvDataSetConnection(Connection) do

    ValidRow :=DataSet.FieldByName('Area').AsInteger > 1000000; 

    end;