FastReportで子バンドを使ったデザインのテクニック



レポートに可変長のデータが含まれていた場合、データ表示部分の高さが変わることによって項目名とにズレが発生する場合があります。

このズレをFastReportの子バンドを使って解消する方法について解説しました。

こんにちは。
ドリームハイブの山本です。

本日は、子バンドというデータバンドについて、お話をしたいと思います。

これ、どういうものかと言うと、まず、ちょっと問題点について、ある問題を解決するものなので、問題点についてお話しします。

これは今、マスターデータというデータバンドに、データベースから引っ張ってきたデータを、ラベル形式で表示するために設定したところです。

この2列になってるのは、その他オプションの段数を今、2段組みにしたからなんですね。

で、この状態で今データを見てみると、問題なく画面表示されてることがわかるんですが、このCOMMON_NAMEのところですね。

この魚のお名前のところをちょっと短めにしてみます。

短くしただけだと別に何ということはないんですが、この表示されていないものを表示させるために、StretchModeをActualHeightに変えてみましょう。

そうすると、足りない部分が、このように長くなって画面表示されることになるんですが、このCOMMON_NAMEのラベルの部分と、実際のデータが表示されている部分が、高さが違うために下に押し出されてしまってるということがわかるでしょうか。

これは、すべてのオブジェクトのデフォルト値なんですが、この中のShiftModeというプロパティ、これが、smAlwaysというふうに設定されていると、何か自分より上のオブジェクトが縦に長くなった、高さが高くなった時に、自動的に下にずれてくれるという、便利と言えば便利なプロパティなんですけれども、今のように、横並びに作ったデータを表示したい場合には、ちょっと邪魔になってしまう、そういう状態なんですよ。

じゃあ、このCOMMON_NAMEの延びた分だけ下に2つのオブジェクトを合わせるにはどうすればいいかと言うと、実はこのままではできないんですね。

プロパティを設定するだけでは、うまくいきません。

そこで、出てくるのが、子バンドと呼ばれるものです。

バンドメニューの中に、子というのがあるんですが、この子バンドを設定して、マスターデータの続きのデータがこの子バンドですよというふうに指定すると解決できます。

まず、マスターデータの続きですよというのを表すために、チャイルドプロパティを子バンドの名前を指定するようにします。

そして、ちょっとずらしますが、Lengthを表すオブジェクトを下にずらした後、このマスターデータそのものの大きさは、動きを作るために、StretchedをTrueに設定します。

これで、大きさを仮に小さくしたとしても、frxDBのこのCOMMON_NAMEですね、これが高くなった分だけ動かしてみますと、高さが変わった分だけ下にずれてるということがわかると思います。

それで、ちょっと子バンドの高さなどをちょっとずらした際に、気にして欲しいのが、この右上、今ちょっと高さをなんでずらしたかと言うと、マスターデータの部分と、Length以降の子バンドの部分、これ、独立したバンドになっているために、1番ページの下まで到達した時に、名前に押し出された下の子バンドが、次の段落に移ってしまう、という場合があります。

これは見た目によろしくないですね。

で、これをなくすためには、マスターデータの子バンドは、一緒に表示するものである、というのを指定するために、KeepChildというプロパティをTrueにしてあげます。

そうすると、今出ていた、右にずれてしまっていた部分がなくなり、余白に1つのデータが収まらないのであれば、次の右側の新しいデータのマスターバンドの繰り返しのところからスタートするように動きが変わります。

このように、子バンドというのは、マスターバンドの続きのデータを表示するために設定するということができる、まあ、このようなバンドであるということがわかっていただけたのではないかと思います。

高さが可変である、テキストデータが大きいようなデータがある場合なんかには、非常に有用なオブジェクトになるのではないかと思います。

本日は、以上です。