1

Windows 7 で Delphi 7 と QuickReports を使用しています。通常、QuickReports にはクエリによって生成された DataSet が必要ですが、StringGrid がクエリの結果の表現であるかのように、StringGrid の内容からレポートを作成したいと考えています。

どのように?

4

2 に答える 2

6

QuickReport.OnNeedDataイベントハンドラーを使用します。MoreData(ブール値)と呼ばれるvarパラメーターを渡します。Trueに設定すると、再度呼び出されます。QuickReport.DataSourceプロパティを空白のままにし、TQRDBTextではなくプレーンなTQRTextコントロールを使用します。

// 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;
于 2010-07-14T17:44:44.130 に答える
4

列のセットは StringGrid 内 (および対応する TClientDataSet 内) で固定されていると仮定します。ステップバイステップの説明:

  1. フォームに TClientDataSet をドロップします
  2. TClientDataSet をダブルクリックし、キーボードの INSERT キーを押して新しいフィールドを追加し、グリッドの列ごとに 1 つのフィールドを追加します。例: COL1、文字列、幅 128。
  3. フォーム上の TClientDataSet を右クリックし、[Create DataSet] をクリックします。
  4. 実行時に、この種のコードを実行します。
  CS.Append;
  CS['COL1'] := 'なんでも';
  CS['COL2'] := 'その他';
  CS.Post;

グリッド内の各行をループして、ループで追加/投稿を行う必要があります。COL1、COL2 などを別のループに割り当てることも、手動でコーディングすることもできます。

于 2010-07-14T08:49:25.950 に答える