Back to Devexpress

TdxSpreadSheetReportDesigner.OnNewDocument Event

vcl-dxspreadsheetreportdesigner-dot-tdxspreadsheetreportdesigner-422867a1.md

latest4.1 KB
Original Source

TdxSpreadSheetReportDesigner.OnNewDocument Event

Enables you to provide multiple spreadsheet controls as report building destinations.

Declaration

delphi
property OnNewDocument: TdxSpreadSheetReportDesignerNewDocumentEvent read; write;

Remarks

This event is fired every time the Report Designer finishes building a previous section of the master-detail report, provided that the Options.ReportMode property is set to rmMultipleDocuments.

The Sender parameter specifies the Report Designer control that contains the master-detail report template.

Pass a new Spreadsheet control (a TdxCustomSpreadSheet descendant instance) in the OnNewDocument event handler as the destination document for building a detail section following the next master dataset row:

delphi
procedure TfrmMasterDetail.ReportDesignerNewDocument(Sender: TdxSpreadSheetReportDesigner; var ADestination: TdxCustomSpreadSheet);
var
  APreview: TfrmPreview; // A report preview form
  APreviewCaptionPrefix: string;
begin
  APreview := TfrmPreview.Create(nil); // Create a new preview form
  APreviewCaptionPrefix := 'Report Preview';
  ADestination := APreview.ssResult; // The preview form class has a TdxSpreadSheet component
  ADestination.ClearAll; // Remove all worksheets from the destination Spreadsheet control on a newly created report window
  APreview.Caption := APreviewCaptionPrefix + ' : MasterRecordIndex = ' + IntToStr(Sender.DataBinding.DataController.FocusedRowIndex); // Add a master record index to each report preview window
  APreview.Show; // Display a new report window
  APreview.Left := APreview.Left + Sender.DataBinding.DataController.FocusedRowIndex * 30; // Shift each new report window right by 30 pixels
  APreview.Top := APreview.Top + Sender.DataBinding.DataController.FocusedRowIndex * 30; // Shift each new report window down by 30 pixels
end;
cpp
void __fastcall TfrmMasterDetail::ReportDesignerNewDocument(TdxSpreadSheetReportDesigner *Sender, TdxCustomSpreadSheet *&ADestination)
{
  TfrmPreview *APreview = new TfrmPreview(NULL); // Create a new preview form
  UnicodeString ApreviewCaptionPrefix = "Report Preview";
  ADestination = APreview->ssResult; // The preview form class has a TdxSpreadSheet component
  ADestination->ClearAll(); // Remove all worksheets from the destination Spreadsheet control on a newly created report window
  APreview.Caption := ApreviewCaptionPrefix + " : MasterRecordIndex = " + IntToStr(Sender->DataBinding->DataController->FocusedRowIndex); // Add a master record index to each report preview window
  APreview->Show(); // Display a new report window
  APreview->Left = APreview->Left + Sender->DataBinding->DataController->FocusedRowIndex * 30; // Shift each new report window right by 30 pixels
  APreview->Top = APreview->Top + Sender->DataBinding->DataController->FocusedRowIndex * 30; // Shift each new report window down by 30 pixels
}

As a result, each detail section is displayed in its own Spreadsheet control on multiple forms:

Note

The first report document (whose master record index is 0 ) in rmMultipleDocuments mode is created as the result of calling the Build procedure, prior to the first OnNewDocument event occurrence.

See Also

TdxSpreadSheetReportDesigner Class

TdxSpreadSheetReportDesigner Members

dxSpreadSheetReportDesigner Unit