FastReportをデータベースに保存します.Netレポート
2736 ワード
通常、レポートは1つの場所に保存されますが、個別のファイルに保存されます.ファイルの数が増えるにつれて、構造や検索が難しくなり、この問題に対して、レポート・テンプレート全体を文字列で保存するReportSourceStringという興味深いレポート・オブジェクト・プロパティに遭遇しました.これは、レポート・テンプレートを任意のデータベースに格納し、すべてのレポートを1つの場所に格納できることを意味します.レポートをデータベースに保存するには、レポートを保存およびロードするための独自の方法を作成する必要があります.それでは始めましょう.まず、レポートを格納するデータベースを作成します.私はすでにマイクロソフトのアクセスを使用しています.このテーブルの構造は、フォームアプリケーションを作成することです.データベースへの接続を追加します.フォームにボタンコンポーネントを配置:データセット、BindingSource、レポート.保存/ロード時にレポートの名前を要求するダイアログが必要です.ボタンは名前に基づいてDialogResultプロパティを設定する必要があります.設計を開始し、次のfastreportsライブラリを使用します.
[インスタンスを作成]ダイアログボックス:
レポートを保存するイベントハンドラを作成します.
ここでは、レポート・フォームに新しい行を作成し、ダイアログ・ボックスを開始します.レポート名をフォームに入力し、ダイアログ・ボックスのテキスト・フィールド値を名前フィールドに入力し、テンプレート・フィールドにレポート・テンプレートをテキストに書き込みます.その後、アダプタを使用して変更内容をテーブルに保存します.レポートをダウンロードするイベントハンドラを作成します.
ダイアログを呼び出し、テキストフィールドに入力した名前に対応するレポートをループで検索し、テンプレートフィールドからReportResourceStringプロパティにレポートをロードします.そして、デザイナーは変更によって更新します.そこで、2つのプロセッサを書きました.標準的なイベントハンドラをブロックし、私たちのハンドラで置き換える必要があります.
ご覧のように、カスタムプロセッサによってイベントをブロックし、レポートを保存およびロードします.メインフォームのボタンOnClickイベントに次のコードを追加します.
書き換えプロセッサはレポート・デザイナをロードします.これにより、MSアクセスデータベースでレポートを保存およびロードできるアプリケーションが作成されました.ReportSourceStringレポートのプロパティを使用して、レポートのストレージを自分の希望するデータベースに整理できます.
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レポートのプロパティを使用して、レポートのストレージを自分の希望するデータベースに整理できます.