作成日: 2022/12/13 最終更新日: 2022/12/13
文書種別
使用方法
詳細
FlexReportでは、レポートの行はデータセットのレコードごとに自動で追加されますが、レポートの列数は固定されています。
しかし、データセットに新しい列が追加された場合など、レポートにも動的に新しい列を追加して再表示したいことがあります。
このような場合、列フィールドの幅と位置を定義し直し、レポートに動的に追加することで、必要な列をすべて表示することができます。
以下に、複数サイト(サイト数が変動)の借方と貸方を表示するレポートの実装例を紹介します。
※このサンプルのプロジェクトファイルを本ナレッジの最後に添付しますので、ご参照ください。

1. フィールドの位置とサイズを動的に定義
新しい列フィールドの幅を計算します。
それには、まずレポート全体の幅からCaptionフィールドの幅を差引き、利用可能なテーブルの幅 (GrosspageWidth) を求めます。 次いで、テーブルの幅をサイトの総数 (sitenumber。サンプルでは、コンボボックスで値を選択) で割って、各列の新しい幅を算出します。
2. 値をループして新しい列を作成
サイトの数だけループして、1で求めた幅を持つ列フィールドを追加します。
以上で完了です。
サンプルを実行し、右上のコンボボックスで値を変更すると、レポートに表示される列数が変化することをご確認ください。
(出典)
本ナレッジは、以下のブログ記事(英語)をベースに作成しました。
詳細についてはこちらをご参照ください。
Add Dynamic Columns at Runtime with FlexReport
しかし、データセットに新しい列が追加された場合など、レポートにも動的に新しい列を追加して再表示したいことがあります。
このような場合、列フィールドの幅と位置を定義し直し、レポートに動的に追加することで、必要な列をすべて表示することができます。
以下に、複数サイト(サイト数が変動)の借方と貸方を表示するレポートの実装例を紹介します。
※このサンプルのプロジェクトファイルを本ナレッジの最後に添付しますので、ご参照ください。
1. フィールドの位置とサイズを動的に定義
新しい列フィールドの幅を計算します。
それには、まずレポート全体の幅からCaptionフィールドの幅を差引き、利用可能なテーブルの幅 (GrosspageWidth) を求めます。 次いで、テーブルの幅をサイトの総数 (sitenumber。サンプルでは、コンボボックスで値を選択) で割って、各列の新しい幅を算出します。
double GrosspageWidth = c1FlexReport1.Layout.Width - tbNameCaption.Width - tbNumberCaption.Width - c1FlexReport1.Layout.MarginLeft - c1FlexReport1.Layout.MarginRight;
double fieldWidth = GrosspageWidth / (sitenumber * 2);
2. 値をループして新しい列を作成
サイトの数だけループして、1で求めた幅を持つ列フィールドを追加します。
for (int i = 1; i <= sitenumber; i++)
{
//Dynamic Columns
tbDebit = new Field();
tbDebit.Name = "Site" + (i).ToString() + "Debit";
tbDebit.Text = "Site" + i.ToString() + "Debit";
tbDebit.Left = tbNumberCaption.Width + tbNameCaption.Width + (fieldWidth * (i - 1) * 2);
tbDebit.Top = 0;
tbDebit.Width = fieldWidth;
tbDebit.Height = 0.4f * 1440;
tbDebit.Calculated = true;
tbDebit.Align = FieldAlignEnum.CenterMiddle;
tbDebit.Border = new C1.Win.C1Document.Border(15f, Color.Black, C1.Win.C1Document.DashStyle.Solid);
tbDebit.Font.Size = 12f;
sDetail.Fields.Add(tbDebit);
tbCredit = new Field();
tbCredit.Name = "Site" + (i).ToString() + "Debit";
tbCredit.Text = "Site" + (i).ToString() + "Credit";
tbCredit.Left = tbNumberCaption.Width + tbNameCaption.Width + (fieldWidth * (i - 1) * 2) + fieldWidth;
tbCredit.Top = 0;
tbCredit.Width = fieldWidth;
tbCredit.Height = 0.4f * 1440;
tbCredit.Calculated = true;
tbCredit.Align = FieldAlignEnum.CenterMiddle;
tbCredit.Border = new C1.Win.C1Document.Border(15f, Color.Black, C1.Win.C1Document.DashStyle.Solid);
tbCredit.Font.Size = 12f;
sDetail.Fields.Add(tbCredit);
}
以上で完了です。
サンプルを実行し、右上のコンボボックスで値を変更すると、レポートに表示される列数が変化することをご確認ください。
(出典)
本ナレッジは、以下のブログ記事(英語)をベースに作成しました。
詳細についてはこちらをご参照ください。
Add Dynamic Columns at Runtime with FlexReport