私の次のXtraReportを検討してください
プレビューすると、次の出力が生成されます。
レポート フッターの合計点数、つまり 125 に注目してください。私の質問は、結果が p であるフィールドのみの合計を計算する方法です。したがって、この場合、TotalMarks の合計は 75 になります。
私の次のXtraReportを検討してください
プレビューすると、次の出力が生成されます。
レポート フッターの合計点数、つまり 125 に注目してください。私の質問は、結果が p であるフィールドのみの合計を計算する方法です。したがって、この場合、TotalMarks の合計は 75 になります。
計算フィールドを追加して割り当てることで解決策を見つけました
Iif([Result]='P',[TotalMarks],0 )
式エディターで。
私の知る限り、サマリーラベルのBeforePrintイベントを介して手動で実行します。コードを使用して必要な合計を計算し、その結果をラベルのTextプロパティに割り当てます。これは、レポートでデータソースに明示的にアクセスできる場合(たとえば、IListデータソースを使用する場合)にうまく機能します。
private void sumLabel_BeforePrint(object sender, BeforeEventArgs e) {
XRLabel lbl = sender as XRLabel;
if (lbl == null) return;
int sum = myList.Where(item => item.Result == "P").Sum(item => item.TotalMarks);
lbl.Text = sum;
}
別の手動ソリューションを使用すると、DetailバンドのBeforePrintイベントを処理してレポートの印刷中に必要な値を要約し、計算された合計を上記と同様にそのBeforePrintイベントの合計ラベルに割り当てることができます。このアプローチは、より複雑なデータソースに対してより効率的かつ柔軟です。
int currentSum = 0;
private void Detail_BeforePrint(object sender, BeforeEventArgs e) {
var currentRow = GetCurrentRow() as MyData;
if (currentRow == null) return;
if (currentRow.Result == "P")
currentSum += currentRow.TotalMarks;
}
private void sumLabel_BeforePrint(object sender, BeforeEventArgs e) {
XRLabel lbl = sender as XRLabel;
if (lbl == null) return;
lbl.Text = currentSum;
// invalidate the currentSum for the case of any further report pringing process
currentSum = 0;
}
残念ながら、純粋に設計者が適用できる解決策についてはわかりません。それが役に立てば幸い。