FastReportをデータベースに保存します.Netレポート


通常、レポートは1つの場所に保存されますが、個別のファイルに保存されます.ファイルの数が増えるにつれて、構造や検索が難しくなり、この問題に対して、レポート・テンプレート全体を文字列で保存するReportSourceStringという興味深いレポート・オブジェクト・プロパティに遭遇しました.これは、レポート・テンプレートを任意のデータベースに格納し、すべてのレポートを1つの場所に格納できることを意味します.レポートをデータベースに保存するには、レポートを保存およびロードするための独自の方法を作成する必要があります.それでは始めましょう.まず、レポートを格納するデータベースを作成します.私はすでにマイクロソフトのアクセスを使用しています.このテーブルの構造は、フォームアプリケーションを作成することです.データベースへの接続を追加します.フォームにボタンコンポーネントを配置:データセット、BindingSource、レポート.保存/ロード時にレポートの名前を要求するダイアログが必要です.ボタンは名前に基づいてDialogResultプロパティを設定する必要があります.設計を開始し、次のfastreportsライブラリを使用します.
using FastReport;
using FastReport.Utils;
using FastReport.Design;

[インスタンスを作成]ダイアログボックス:
public SaveLoadForm form2 = new SaveLoadForm();

レポートを保存するイベントハンドラを作成します.
void cmdSave_CustomAction(object sender, EventArgs e)
 {
 ReportsDataSet.ReportsRow row;
 row = reportsDataSet1.Reports.NewReportsRow();
 if (form2.ShowDialog() == DialogResult.OK)
 {
 row.Name = form2.ReportName;
 row.Template = report1.ReportResourceString;
 this.reportsDataSet1.Reports.Rows.Add(row);
 ReportsDataSetTableAdapters.ReportsTableAdapter adapter = new ReportsDataSetTableAdapters.ReportsTableAdapter();
 adapter.Update(reportsDataSet1.Reports);
 }
 }

ここでは、レポート・フォームに新しい行を作成し、ダイアログ・ボックスを開始します.レポート名をフォームに入力し、ダイアログ・ボックスのテキスト・フィールド値を名前フィールドに入力し、テンプレート・フィールドにレポート・テンプレートをテキストに書き込みます.その後、アダプタを使用して変更内容をテーブルに保存します.レポートをダウンロードするイベントハンドラを作成します.
void cmdOpen_CustomAction(object sender, EventArgs e)
 {
 if (form2.ShowDialog() == DialogResult.OK)
 {
 for (int i = 1; i < reportsDataSet1.Reports.Rows.Count; i++)
 if (reportsDataSet1.Reports[i].Name == form2.ReportName)
 {
 report1.ReportResourceString = reportsDataSet1.Reports[i].Template.ToString();
 }
 Designer designer = sender as Designer;
 designer.SetModified(this, "EditData");
 }
 }

ダイアログを呼び出し、テキストフィールドに入力した名前に対応するレポートをループで検索し、テンプレートフィールドからReportResourceStringプロパティにレポートをロードします.そして、デザイナーは変更によって更新します.そこで、2つのプロセッサを書きました.標準的なイベントハンドラをブロックし、私たちのハンドラで置き換える必要があります.
private void DesignerSettings_DesignerLoaded(object sender, EventArgs e)
 {
 (sender as Designer).cmdSaveAs.CustomAction += new EventHandler(cmdSave_CustomAction);
 (sender as Designer).cmdOpen.CustomAction += new EventHandler(cmdOpen_CustomAction);
 }

ご覧のように、カスタムプロセッサによってイベントをブロックし、レポートを保存およびロードします.メインフォームのボタンOnClickイベントに次のコードを追加します.
private void DesignBtn_Click(object sender, EventArgs e)
{
Config.DesignerSettings.DesignerLoaded += DesignerSettings_DesignerLoaded;
report1.Design();
}

書き換えプロセッサはレポート・デザイナをロードします.これにより、MSアクセスデータベースでレポートを保存およびロードできるアプリケーションが作成されました.ReportSourceStringレポートのプロパティを使用して、レポートのストレージを自分の希望するデータベースに整理できます.