FlexReport のコードはゼロから作成されています。したがって、C1Report から FlexReport への API の移行には、次のように重要な変更点が含まれています。
FlexReport では、レポートレベルの専用コレクション C1FlexReport.Parameters が別途用意されています。このコレクションで、レポートパラメータを指定できます。.xml ファイルから C1Report レポート定義をインポートすると、PARAMETERS キーワードを使用して従来の方法で指定されたパラメータは、C1FlexReport.Parameters コレクションに自動的に追加されます。
FlexReport では、データソースが開かれた後に OnOpen スクリプトが実行されます。したがって、そのスクリプトでメインデータソースに行われた変更は、レポートに影響しません。レポートを生成する前にデータソースの一部を変更するには、GlobalScripts を使用します。GlobalScripts には、関数定義、プロシージャ定義、およびこれらの定義内にないコードを含めることができます。これらの定義とコードは、レポートのレンダリングが開始されてデータソースが開かれる前に、すべて実行されるようになりました。
C1Report では、Field から派生されたカスタムフィールドは、GetRenderContent() メソッドをオーバーライドします。C1FlexReport では、このメソッドのシグネチャが次のように変更されました。
public virtual void GetDesignerRenderContent(
ref string text,
ref Image image,
ref bool disposeImage);
このオーバーライドメソッドの disposeImage を true に設定すると、画像の使用後に、C1FlexReport がその画像に対して Dispose() を呼び出します。
C1Report.OutlineRootLevel プロパティは削除されています。アウトライン構造を制御するには、OutlineLabel プロパティと OutlineParent プロパティを使用します。サブレポートによって生成されたアウトラインをオフにするには、SubreportField.OutlinesVisible プロパティを使用します。
C1Report には、テキストを生成/レイアウトするためのメソッドが 2 つあり(デフォルトおよび「gdi+」)、それらは少し異なっています(
C1Report.UseGdiPlusTextRendering を true に設定した場合は非デフォルト)。これらのメソッドは、多少異なるテキストレイアウトを行う場合があります(改行が異なる場所に配置されるなど)。FlexReport は常に、UseGdiPlusTextRendering が設定された C1Report と同様にテキストを生成/レイアウトします。ただし、それでも、UseGdiPlusTextRendering が設定された C1Report と FlexReport の間では改行に違いが発生する場合があります。
AddOutlineEntry イベントは削除されています。フィールド/セクション/サブセクションによって生成されるアウトラインエントリのテキストを変更するには、OutlineLabel プロパティを使用します。
C1FlexReport.ReportError イベントのために特殊な新しいイベントタイプ(ReportErrorEventArgs イベント引数を受け取る ReportErrorEventHandler)が追加されました。ReportEventArgs タイプが変更されました。イベント引数から Exception と Handled が削除されました。
レポートにマップカスタムフィールドが含まれる場合は、レポートを同期して生成する必要があります(RenderAsync() ではなく Render() を呼び出す)。そうしないと、C1FlexViewer コントロールにマップフィールドが表示されません。C1FlexViewer.UseAsyncRendering プロパティを False に設定する必要があります。
C1Report では、エラーが発生した場合、EndReport イベントが呼び出されません。FlexReport では、レンダリング中に致命的エラーが発生した場合でも、EndReport イベントが呼び出されます。
次の C1Report メソッド/プロパティは、C1FlexReport から削除されました。
C1FlexReport では、コードビハインドで C1Report Render<X> メソッドにアクセスできません。これらのメソッドは内部的に使用されます。
次のコードでは、C1Report Render<X> オブジェクトを使用できません。
c1Report1.Document.Body.Children.Add(RenderGraphic obj)
このメソッドは、FlexReport ではサポートされていません。
C1FlexReport.Document は System.Drawing.Printing.PrintDocument に変換できません。PrintDocument の C1Report.Document プロパティは存在しないため、FlexReport で PrintDocument を使用してはなりません。
FlexReport では、IC1FlexReportRecordset に ApplyFilter() メソッドと ApplySort() メソッドがありません。代わりに、FlexReport の DataSource にあるフィルタ定義とソート定義を使用してください。IC1FlexReportRecordset を DataSource.Recordset に割り当てても、DataSource でフィルタ/ソートを定義できます。
FlexReport では、C1Report の FieldBase オブジェクトを使用できなくなりました。
C1FlexReport では、フィールドは「レガシー」タイプです。特殊なタイプは、C1FlexReport の FieldBase から派生されるようになりました。次のフィールドオブジェクトは、コードビハインドで直接作成する必要があります。
対応するプロパティは、C1Report FieldBase オブジェクトの設定に使用されるプロパティと同じプロパティを使用します。
C1FlexReport では、C1Report の CanGrow プロパティと CanShrink プロパティの名前が変更されました。代わりに、C1FlexReport.AutoHeight、C1FlexReport.AutoWidth、および C1FlexReport.AutoSizeBehavior を使用します。CanGrow=True および CanShrink=True は、C1FlexReport.AutoSizeBehavior.GrowAndShrink として使用できます。
FlexReport では、AddScriptObject イベントの代わりに、GetScriptObject イベントがあります。したがって、次のコードは
private void c1flxr_StartReport(object sender, System.EventArgs e)
{
c1flxr.AddScriptObject("LookUp", new LookUpObject());
}
次のように変更します。
c1flxr.GetScriptObject += c1flxr_GetScriptObject;
...
void c1flxr_GetScriptObject(object sender, C1.Win.FlexReport.ReportGetScriptObjectEventArgs e)
{
if (e.Name.ToLower() == "lookup")
e.Object = new LookUpObject();
}
レポートテンプレートが変更されない場合、C1FlexReport は、レンダリングされたコンテンツをキャッシュし、レポートを再生成しません。レポートを必ず再生成するには、C1FlexReport.SetDirty() メソッドを呼び出します。