2

私の次のXtraReportを検討してください

ここに画像の説明を入力

プレビューすると、次の出力が生成されます。

ここに画像の説明を入力

レポート フッターの合計点数、つまり 125 に注目してください。私の質問は、結果が p であるフィールドのみの合計を計算する方法です。したがって、この場合、TotalMarks の合計は 75 になります。

4

3 に答える 3

5

計算フィールドを追加して割り当てることで解決策を見つけました

Iif([Result]='P',[TotalMarks],0 )

式エディターで。

于 2012-10-24T19:14:26.427 に答える
3

私の知る限り、サマリーラベルの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;
}

残念ながら、純粋に設計者が適用できる解決策についてはわかりません。それが役に立てば幸い。

于 2012-10-16T17:48:04.573 に答える