Crystal Reports
CrystalReports XI Release2はVisualStudio2005と併用すると、VisualStudioのIDEに統合されて、非常に使い勝手のよい帳票ツールとなります。エディションによってはおまけバージョンのCrystalReportsがついてくるものもあるのですが、自分のエディションにはついていないので別途購入しました。
なお、Windowsアプリケーションなどに組み込む場合は、CrystalReports Developer版以上を購入しなければなりません。また、VisualStudioのIDE内で使うためにはRelease2にアップグレードするためのパッチ(無料)を当てなければ利用できないなどちょっとわかりにくい製品構成になっています。
Crystal Reports Viewerのタブの文字がダサい
Windowsアプリケーションに埋め込みで作成した帳票は、CrystalReportViewerから見ると、レンダリングされたときViewer内に「メイン レポート」というタブが表示されます。レポート名とかが表示されたり、任意の文字列を指定できれば使い道も広がるのですが、「メイン レポート」しか出てこないのではちょっと使い道がありません。そこで、
任意の文字列に変更ができないか?
非表示にできないか?
を検討してみることにしました。
まず、ご本家のFAQによると
Q.【開発】 .NETのビューアでプレビューを実行した時のビューア左上の [メイン レポート] のタブは非表示にできますか。
A.残念ですが、このタブを非表示にはできません。固定で表示する内部仕様となります。(2004/11/06)
ダメじゃん。サポート元でキッパリと言い切られています。
もちろん、CrystalReportViewerのプロパティー設定でも消すことはおろか、タブの文字列を設定することすらできません。
が、もう少しGoogle先生に働いてもらったところ、「クリスタルレポート技自慢」という掲示板で「No.2287」の質問
クリスタルレポートビューワーのタブの「メインレポート」という文字列は
変更できないのでしょうか?
ご存知でしたら、ご教授ください。
というのがあり、その回答のひとつに
ちょっと無理やりですが、変更出来ますよ。
※Crystal Reports for Visual Studio .NET 2003で確認
Dim objRepView As Object
Dim objControl As Object
For Each objRepView In CrystalReportViewer1.Controls
If objRepView.GetType.Name = "PageView" Then
For Each objControl In objRepView.Controls
If objControl.GetType.Name = "TabControl" Then
CType(objControl, TabControl).TabPages(0).Text = "変更したいタイトル"
End If
Next
End If
Next
というのがありました。コードで変更できるとわかれば問題ありません。
上記のコードをとりあえず、C#に書き換えてみます。が、VBとちがって、C#はクラス名とか厳密に記述しないといけなかったりするので・・・えーっと、VBの「CType」ってキャストのことか・・・とかいろいろVBを思い出しながら書き換え、「論よりRun」します。
動きません・・・orz。
まあ、安易に人に頼ってはいけないと思い直し、ちゃんと細かく調査をしながらやり直します。
private void setTabText(CrystalDecisions.Windows.Forms.CrystalReportViewer crystalReportViewer, string newText)
{
foreach (Control control in crystalReportViewer.Controls)
if [...]