ぺやろぐ

しがない1型糖尿病プログラマーの雑記ブログ

【AcitveReports 9.0】グループフッターのコントロールをコード上でページフッターに追加するとエラーになる

人気記事セレクション

スポンサーリンク

どうも、Twitterはフォローされるけど、読者登録はされないぺやんぐ(@peyangu485)です。
いやまぁ、いいんだけどね。(どっちにしろありがたいこと)


◆背景

ActiveReports 3.0から変換ツールを使用し、9.0で使用するためのマイグレ作業中。
コードは3.0当時のまま、検証を開始した。


◆現象

印刷時に「〇〇は既に存在しています」エラーが出てこける。


◆発生箇所

ページフッターにグループフッターのコントロールをAddしているところ。


◆原因

単純にコントロール名が重複するからだと思われる。


◆対応

そもそも、ページフッタとグループフッタの違いについて知る必要がある。

  • ページフッタはdetail行が何行あってもページフッタ領域が割り当てられる。
  • グループフッタは、同一グループで、detail行が次のページに跨っても領域は割り当てられず、detail行の出力が全て終わってからからグループフッタ領域を割り当てる。

つまり、毎ページ出したかったらページフッタ、グループ単位で出したかったらグループフッタを使うらしい。
そのまんまやな。

てことで、対応としては、

その1:デザイナでグループフッターのコントロールをページフッターに移動し、コード上で追加しないようにする。
問題:グループフッターに置いて、データをバインドしていた場合、動きが変わる。(ページフッター上のコントロールにはバインドできないので)

その2:コード上でグループフッター上のコントロールをコピーし、コントロール名を変更した後にページフッターに追加する。
問題:コードが汚くなる。
   コントロール名が変更されることの弊害を考慮する必要がある。

データをバインドしていないコントロールしかない場合なら、対応その1で問題なさそう。
3.0だとこうしないといけなかった可能性があるし。
コード上にはどういった意図でコードで追加をしたのか記載されていないので、あくまで憶測だが。

バインドしている場合が問題。
その1その2、どっちも対応としてはよろしくない。

今回、グループ単位での出力があるっぽいけど、毎ページ出力しているページフッターを利用して、グループフッター自体をvisible=falseにしてるから、結局ページフッターに最初から置いておけばすむ話になりそう。
バインドもしてなさそうだし。

コード見てると、最初に作った人がデザイナ開くのが億劫になってコード上でページフッターに追加させただけでは説が濃厚。
グループフッターを非表示にしているところとか。
低スペックPCだったからコード上で対応した感ある。


◆まとめ

対応方法が決まったら、また追記します。

今のところその1で行くつもり。