Как создать QuickReport из содержимого TStringGrid - PullRequest
0 голосов
/ 14 июля 2010

Я использую Delphi 7 и QuickReports в Windows 7. Обычно QuickReports требует DataSet, сгенерированный запросом, но я хочу сделать отчет из содержимого StringGrid, как будто StringGrid представляет собой представление результатов запрос.

Как?

Ответы [ 2 ]

5 голосов
/ 14 июля 2010

Используйте обработчик событий QuickReport.OnNeedData.Он передает параметр var с именем MoreData (логическое значение);установка в True означает, что он вызывается снова.Оставьте свойство QuickReport.DataSource пустым и используйте простые элементы управления TQRText, а не TQRDBText.

// CurrLine is an Integer. In your case, it can represent a row in the StringGrid.
procedure TPrintLogForm.QuickRep1NeedData(Sender: TObject;
                      var MoreData: Boolean);
begin
  MoreData := (CurrLine < StringGrid1.RowCount);
  if MoreData then
  begin
    qrTextLine.Caption := StringGrid1.Cells[0, CurrLine];
    qrTextData.Caption := StringGrid1.Cells[1, CurrLine];
    Inc(CurrLine);
  end;
end;
4 голосов
/ 14 июля 2010

Я предполагаю, что набор столбцов фиксирован в пределах StringGrid (и без соответствующего TClientDataSet).Пошаговые инструкции:

  1. Перетащите TClientDataSet на форму
  2. Двойным кликом по TClientDataSet нажмите клавишу INSERT на клавиатуре, чтобы добавить новое поле, добавьте однополе для каждого из столбцов вашей сетки.Пример: COL1, String, 128 width.
  3. Щелкните правой кнопкой мыши TClientDataSet в форме и нажмите «Создать DataSet»
  4. В RUNTIME запустите такой код:
  CS.Append;
  CS['COL1'] := 'Whatever';
  CS['COL2'] := 'An other thing';
  CS.Post;

Вам нужно будет выполнять добавление / публикацию в цикле, циклически перебирая каждую строку в сетке.Вы можете назначить COL1, COL2 и т. Д. В другом цикле или вручную написать его.

...