ニュートン メニュー

株式会社ニュートン

マイクロソフトパートナー

YouTube公式チャンネル

体験版ダウンロード

製品案内

ライセンスパック

ライセンスについて

カスタマイズ受付

製品購入ガイド

オンラインショップ
直販ショップ !
ニュートンストアで購入
コンポーネントソース
コンポーネントソースで購入

優待販売・
 キャンペーン情報

ユーザサービス
〔サポートページ〕

サポート体制

お知らせ
・ニュースリリース
・懐かCM
・イベント出展
・製品関連記事

会社概要

個人情報保護方針

お問い合わせ先

 

ニュートンホーム Q&A
Report Sharp Shooter 4J

スーパーフレキシブル 帳票コンポーネント
Report Sharp Shooter 4J

このページは、Report Sharp Shooter 4J 関連のユーザ様より寄せられたご質問の一部とその回答を掲載しております。


【Report Sharp Shooter 4J Q&A一覧】

QNo.

タイトル

Q. 質問

日付

A. 回答

70

Visual C++でビルドしたプログラムが実行時に体験版ダイアログが表示される

Q. Visual C++のCLRプロジェクトでビルドしたプログラムを実行すると体験版ダイアログが表示されます。回避方法を教えてください。
 

2013/02/28

A. はい、デフォルトで Visual Studio は C++のCLR(Common Language Runtime)プロジェクトのライセンスをコンパイルしません。ライセンスを付けてプロジェクトをビルドするには、以下を行う必要があります。

1. ソリューションエクスプローラで licenses.licx ファイルを含んでいるプロジェクトを右クリックする。
2. コンテキストメニューから「ビルドのカスタマイズ」を選択する。
3. 「lc(.targets, .props)」チェックボックスを選択し、OKを押してダイアログを閉じる。
4. ソリューションエクスプローラの「licenses.licx」ファイルを右クリックする。
5. コンテキストメニューから「プロパティ」を選択する。
6. 表示されたフォームの左側のツリーの「構成プロパティ」の「全般」を選択する。
7. 「項目の種類」で「License Compiler」を選択し、OKボタンを押してダイアログを閉じる。
8. リビルドする。
 

69

JANコードのOCR併記タイプと通常タイプ

Q. レポートデザイン上にBarCodeコントロールを配置し、CodeTypeプロパティを「CodeJAN13」または「CodeJAN8」に設定すると、JANコードの先頭にOCR併記タイプ用の「T」や「F」が付加されます。それらを外して通常タイプのバーコードにできますか?
 

2012/08/08

A. はい、代わりにCodeTypeプロパティに「CodeEAN13」や「CodeEAN8」を設定してください。先頭の「T」や「F」は出力されません。
 

68

64ビットOSで、体験版のメッセージが表示される

Q. 製品を入手し、ライセンスを登録しても体験版のメッセージが表示されます。PCのOSは、Windows7 64ビット です。解決策はありますか?
 

2012/08/06

A. はい、その環境ですと弊社WebのReport Sharp Shooter 4Jの更新履歴のページ
http://www.newtone.co.jp/support/sunewmk_rss400.html
にあります、FixNo.10の次の内容が原因と思われます。

**引用**
【その他の変更】の
[2] ライセンスの管理(LicenseManager.exe)で、64bitのOS上でランセンス登録をすると製品版と認識されない。(体験版と認識される)
対象ファイル:(インストール先がデフォルトの場合)
C:\Program Files\Perpetuum Software\Net ModelKitSuite\Bin\LicenseManager.exe

********

つきましては、お客様のお使いのDLLのバージョンをご確認いただきまして、最新のDLL(DLLバージョン:4.4.0.6/更新日スタンプ: 2012/02/22以降の)の製品に更新してください。
 

67

Webアプリケーションで「InlineReportSlot」を利用してエラー

Q. Report Sharp Shooter を利用したWebアプリケーションで、次のようなエラーが表示されます。

System.Resources.MissingManifestResourceException はユーザー コードによってハンドルされませんでした。Message="指定されたカルチャまたはニュートラル カルチャに対して適切なリソースが見つかりませんでした。・・・・・・

解決策はありますか?
 

2012/08/06

A. はい、このエラーはWebアプリケーションでReport Sharp ShooterのReportManagerのレポートタイプで「InlineReportSlot」を利用している場合に表示されることがあります。代わりに「FileReportSlot」をご利用ください。Webアプリケーションには「FileReportSlot」をご利用ください。
 

66

デザイナで直線(LineShape)でサイズがゼロの場合にマウス選択できない

Q. Report Sharp Shooter のデザイナで、シェープコントロールを直線(LineShape)に設定した場合、サイズ(幅または高さ)がゼロのコントロールは、マウスを使用して選択できません。

解決策はありますか?
 

2012/08/06

A. はい、残念ながらシェープの直線(LineShape)の場合、マウスを使用してサイズがゼロのコントロールは選択できません。申し訳ございませんが、コントロール一覧またはオブジェクトツリーからの選択でご利用ください。
 

65

Webビューアでの表示で「項目は既に追加されています。」のエラーがでる

Q. Webビューアでの表示で次のようなエラーがでる場合があります。

「項目は既に追加されています。辞書のキー: ・・・」

解決策はありますか?
 

2012/08/06

A. はい、Report Sharp ShooterのWebビューアに表示するデザインは、コントロールが重なるような配置をするとそのようなエラーが表示される場合があります。たとえばテキストボックスの上にシェープで線を配置してシェープオブジェクトの順序を先頭に指定している場合やテキストボックス同士がかぶさっている場合などです。このエラーが表示された場合はそのあたりをご確認ください。

また、項目の枠線を表示したい場合は、テキストボックスのBorderプロパティのご利用をお勧めします。これですと枠線としてのシェープコントロールが不要です。詳しくは、このページの「QNo.51」をご参照ください。

また、デザイン時のグリッドの間隔はデフォルトが0.5cm(5mm)になっていますが、この間隔では広すぎてテキストボックスの位置が決めづらい場合は簡単に変更することができます。詳しくは、このページの「QNo.21」をご参照ください。
 

64

サンプルプロジェクトWebDemoでVS2005用からVS2010にコンバートするとエラーがでる

Q. WebDemoでVisual Studio 2005用からVisual Studio 2010にコンバートすると次のエラーがでます。

アプリケーション レベルを超えて allowDefinition='MachineToApplication' として登録されているセクションを使うことはできません。このエラーは、仮想ディレクトリが IIS でアプリケーションとして構成されなかった場合に発生します。 C:\Program Files\Perpetuum Software\Net ModelKit
Suite\Samples\Report Sharp-Shooter\CSharp\WebDemoVS2010\Backup\WebDemo\Web.config


解決方法を教えてください。
 

2012/08/06

A. はい、コンバートによってできた「backup」フォルダを削除してください。
 

63

Webビューアでエクスポートのコントロールを非表示にする

Q. Report Sharp Shooter のWebビューアでエクスポートのコントロールを非表示にすることはできますか?
 

2012/08/06

A. はい、スタートページ(例:DemoPage.aspx)などの(<html>要素内の)<head>要素内に次のスクリプトを追加してください。

<script type="text/javascript">

//エクスポートのコントロールを非表示にする
document.getElementById("SharpShooterWebViewer1ExportButton").parentNode.style.display = "none";
document.getElementById("SharpShooterWebViewer1ExportComboBox").parentNode.style.display = "none";

</script>

 

62

Webビューアで「レポートの印刷」ボタン押下時にPDFへの自動エクスポート

Q. Report Sharp Shooter のWebビューアで「レポートの印刷」ボタン押下時にPDFへのエクスポートを自動で行うことはできますか?
 

2012/08/06

A. はい、スタートページ(例:DemoPage.aspx)などの(<html>要素内の)<head>要素内に次のスクリプトを追加してください。

<script type="text/javascript">

//「レポートの印刷」ボタン押下時にPDFへのエクスポートを自動で行う
//(print メソッドでエクスポートのアクションを実行)
this.printallSharpShooterWebViewer1 = function () {
window.open(document.URL + "?guid=" + getguidSharpShooterWebViewer1() + "&action=export&format=pdf", "", "");
}

</script>

 

61

Webビューアでイメージやシェープ、バーコードが印刷されない

Q. Report Sharp Shooter のWebビューアで、「レポートの印刷」ボタンや「現在ページの印刷」ボタンで印刷をしてもイメージやシェープ、バーコードが印刷されません。解決方法はありますか?
 

2012/08/06

A. はい、スタートページ(例:DemoPage.aspx)などの(<html>要素内の)<head>要素内に次のスクリプトを追加してください。

<script type="text/javascript">

//「レポートの印刷」ボタンで、イメージを有効にする
this.printallSharpShooterWebViewer1 = function () {
window.open(document.URL + "?guid=" + getguidSharpShooterWebViewer1() + "&format=html&pages=all&action=print");
}

//「現在ページの印刷」ボタンで、イメージを有効にする
this.printpageSharpShooterWebViewer1 = function () {
window.open(document.URL + "?guid=" + getguidSharpShooterWebViewer1() + "&format=html&pages=" + pageIndex + "&action=print");
}

</script>

 

60

プロジェクトを開くとライセンスに関するメッセージが表示される

Q. 別のPCで作成した、本製品を利用したVisual Studio のプロジェクトを開くと次のようなメッセージがダイアログに表示されます。

The program has detected that you are possibly using one and the same
license key on more than one computer.
In order to use this program on this computer, you should acquire an
additional license.
To do that, please contact at nstore-j@newtone.co.jp


解決方法はありますか?

 

2012/07/24

A. はい、そのような現象になる場合があることが確認されています。この場合は、このメッセージを無視してダイアログの「Continue」ボタンを押しプロジェクトを開き、一度、プロジェクトの「リビルド」をお試しください。
 

59

印刷 ダイアログからの印刷で、指定した通りの用紙で印刷されない

Q. 印刷 ダイアログを使用した印刷で、2012年4月11日頃のWindows Upadteなどで、マイクロソフト社のセキュリティ更新プログラム[MS12-025]を適用した後、Windows フォーム用のアプリケーションで縮小印刷などダイアログで指定した出力にならない場合があるのですが、回避策はありますか?
 

2012/04/18
(2012/06/13更新)

A. はい、マイクロソフト社のセキュリティ更新プログラム[MS12-025]を適用後、そのような現象になることはマイクロソフト社により確認されています。
この現象は、Report Sharp Shooter固有の現象ではなく、すべてのWindows フォーム用アプリケーションの印刷に関わる問題です。

2012年6月13日に、マイクロソフト社よりこの現象を修正するセキュリティ更新プログラム[MS12-025]の最新版が公開されましたのでご案内いたします。この最新のセキュリティ更新プログラムは、Microsoft Update および Windows Update から入手できます。

マイクロソフト社の次の当該ページをご覧ください。
http://technet.microsoft.com/ja-jp/security/bulletin/ms12-025

このページ内の「このセキュリティ更新プログラムに関するよく寄せられる質問 (FAQ)」にて詳細情報が掲載されております。
マイクロソフト社は、この中で『最初に提供された更新プログラムを適用済みのお客様に、再提供された更新プログラムをインストールすることを推奨します。』としています。

 

58

Report Viewer の印刷ボタンなどの表示やショートカットキーを無効にする

Q. Report Viewer の印刷ボタンなどの表示やショートカットキーを無効することはできますか?
 

2012/02/14

A. はい、次のコードを使用して、レポートの印刷やエクスポートのオプションをオフにすることができます。

//ツールボタンの非表示指定
reportViewer1.ShowPrint = false;
reportViewer1.ShowExport = false;

//ショートカットキーの無効指定
reportViewer1.Actions["Print"].Shortcut = Shortcut.None;
reportViewer1.Actions["Export"].Shortcut = Shortcut.None;

※ショートカットの無効機能は、バージョンが 4.4.0.6で更新日スタンプが2012/02/14以降のDLLが必要です。

 

57

ラベルを横(水平)方向に表示する

Q. 各ページにラベルを3列 表示にするためにDataBandオブジェクトのColumnCountプロパティを使用しています。

しかし、その場合ラベルは縦(垂直)方向に表示されてしまいます。
つまり、1ページ中の1列目の上段から下段、次に2列目の
上段から下段、といった方向順でデータが表示されます。これだと、データが少ない場合、たとえば3列目が空白の状態になってしまいます。

これを、1列目の1段目の次は2列目の1段目、といった順番で、横(水平)方向に表示したいのですが、よい方法がありますか?
 

2012/02/08

A. はい、サンプルプロジェクトを用意いたしましたので、こちらからダウンロードしてご利用ください。

MultiColumnByDataBand.zip

実行例


レポートデザイン上の簡単な説明は次の通りです。

DataBandオブジェクトのColumnCountプロパティでは横方向順の列表示はできませんので、他の方法でそれを実現します。

まず、別のバンドのオブジェクトを並列表示するためにSideBySideオブジェクトをデザインのベースに置きます。

次に、DataBandオブジェクトとDeatailオブジェクトのセットを3列分を配置し次のように設定します。

デザイン上の3つ(3列分)のDataBandオブジェクトのDataSourceプロパティは同一です。
しかし、3つ(3列分)のDeatailオブジェクトのバインドのVisibleプロパティが異なります。
たとえば、1列目にあたるdatail1のVisibleプロパティでは、

dataBand1.LineNumber % 3 == 1

のように、DataBandのレコード番号を3で割った余りが1の場合のみ、VisibleプロパティをTrueにして、Deatailオブジェクト(データを表示するコンテナ自体)を表示しています。

同様に2列目、3列目のDeatailオブジェクトのバインドのVisibleプロパティは、それぞれ

dataBand2.LineNumber % 3 == 2
dataBand3.LineNumber % 3 == 0

と設定してあります。

このように、SideBySideオブジェクトをベースコンテナとして、DataBandオブジェクトとDeatailオブジェクトのセットで必要な列数分に振り分け、データを横方向に表示することができます。

詳細は、プロジェクトのレポートデザイナでデザインをご覧ください。
 

56 ツールボックスへの登録

Q. インストールしても、ツールボックスに Report Sharp Shooter コンポーネントが表示されない場合がありますか?

2012/01/31

A. はい。以下の場合が該当します。
「インストールフォルダの選択」画面で「すべてのユーザ」を選択した場合、インストール時のユーザ以外のユーザでログインして VisualStudio を使用する場合は、ツールボックスに表示されません。この場合でも、Report Sharp Shooter コンポーネントを使用することは可能ですが、ツールボックスへは手動で登録してご利用ください。

 

55

Report Sharp Shooterのデザイン時に用紙サイズをB4に設定すると、デザインと印刷物で 出力位置が多少異なる

Q. B4サイズのデザインを作成してビューアから印刷を行うと、デザインしたものより左右に約5mmほどずれてしまいます。
 

2011/11/02

A. はい、その場合、お客様のプリンタの用紙サイズは、B4 JIS (257×364)mmを使用されています。

Report Sharp Shooterのデザイン上で設定できる用紙サイズのA列、B列は全て(JISではなく)国際基準のISOを前提にしております。
(ただし、JISのA列はISOのA列と同じサイズで決められていますのでB列のようなサイズの違いはありません。)

このように、JISのB列(B5、B4、B3など)を利用するプリンタで印刷する場合は、Report Sharp Shooterのデザイン上で、用紙サイズをB列ではなく、「ユーザー定義」を選択し、用紙サイズをJISのサイズに応じて設定してください。

<参考> JIS B列の用紙サイズ (単位:mm)
 
JIS B0 1030×1456
JIS B1 0728×1030
JIS B2 515×728
JIS B3 364×515
JIS B4 257×364
JIS B5 182×257
JIS B6 128×182
JIS B7 091×128
JIS B8 64×91
JIS B9 45×64
JIS B10 32×45
 

54

Excelへの角丸矩形のエクスポート

Q. Shapeコントロールで、ShapeStyleプロパティをRoundRectangleShape(角丸矩形)にした場合、そのレポートをExcelへエクスポートするとそのShape全体が表示されません。ShapeStyleプロパティをRectangleShap(矩形)にすれば表示されます。解決策はありますか?
 

2011/06/03

A. Excel のセルは角丸の枠をサポートしていないため、角丸矩形はエクスポートされません。残念ながら、現在解決策はございません。
 

53

Excelへのイメージのエクスポート

Q. Excelへのエクスポート時に、ビューアでは表示されていたイメージが、出力したExcelデータ上には表示されません。
解決策を教えてください。
 

2011/06/03

A. これは本製品の仕様です。Excelへのエクスポートにおける規定の動作です。
将来的には、OpenXML 形式へのエクスポートを実装すれば解決できる可能性がありますが、残念ながら現時点では未定です。
 

52

右寄せを設定したTextBoxの右端に(意図した)空白を入れる

Q. 右寄せを設定したTextBoxに対して、右端に空白を入れる方法を教えてください。
 

2011/06/01

A. はい、その場合はTextBoxコントロールの代わりに、AdvancedTextコントロールをご使用ください。
AdvancedTextオブジェクトのバインドタブのTextプロパティに"&nbsp&nbsp"を付加すると、TextAlignプロパティに[MiddleRight]が設定してあっても空白1個分が末尾に付きます。
たとえば、dataBand1のPrice項目の値の次に常に空白1個分を付加するのあればdataBand1["Price"]+"&nbsp&nbsp"をバインドタブのTextプロパティに設定します。
なお、AdvancedTextオブジェクトでは、プロパティタブのTextプロパティとバインドタブのTextプロパティは同じTextプロパティですが、用途が異なりますのでご注意ください。
 

51

罫線の引き方

Q1. レポートデザインで罫線を利用する方法は?
 

2011/06/01

A1. 罫線は、ShapeコンポーネントやTextBoxコンポーネントを利用します。

Shapeオブジェクトを利用してShapeStyleプロパティや関連する各プロパティで、色や線種などを指定します。

また、TextBoxオブジェクトの枠の四辺の必要部分だけを表示し、罫線の代わりにする方法もよく使用されます。
TextBoxオブジェクトのBorderプロパティを選択すると、「枠のエディタ」が起動します。このエディタを使って、表示する罫線の位置や線種、色、線幅を指定することができます。
 

Q2. グループセクションでの枠線は引けるか?
 

A2. はい、引けます。
グループセクション(GuropBand)内にDetailオブジェクトを配置すれば、その上にShapeオブジェクトやTextBoxオブジェクトを配置でき罫線を引けます。
 

Q3. グループセクションをまたいで(四角の外枠など)の線は引けるか?
 

A3. はい、引けます。
GuropBand内に明細用のDetailオブジェクトを配置し、その上にShapeオブジェクトで両脇の縦線を、ヘッダやフッタにその罫線を閉じる線を配置すれば、全グループを囲む罫線が引けます。
 


上記に関する
サンプルプロジェクトを作成いたしました。
以下よりダウンロードできます。

Groups_Keisen.zip

 

50

ビューア上のスクロールバーの非表示

Q. レポートビューアでページが複数あっても縦スクロールバーを表示させないようにする事はできますか?
 

2011/06/01

A. はい、できます。
この機能を実現したサンプルプロジェクトを作成いたしました。
以下よりダウンロードできます。

ScrollBarOnOff.zip

実行していただき、フォーム右下の「スクロールバー有無」ボタンを押してご確認ください。
 

49

外枠に実線、5行単位で破線をつける表

Q. 表あたり20行で外枠に実線、5行単位で破線をつける 、次のような表の作り方を教えてください


 

2011/03/18

A. はい、次のリンクよりサンプルプロジェクトをダウンロードしてご利用ください。

WindowsFormsApplicationSolidLine2.zip

このサンプルでは、レポートのデザイン上でスクリプトを使用することで実現しています。

具体的には、デザイン上の
1) Documentオブジェクト(document1)のComonScriptプロパティ
2) Detailオブジェクト(detail1)のGenerateScriptプロパティ
3) TextBoxオブジェクト(textBox1)のGenerateScriptプロパティ
をご覧ください。

1) のDocument.CommonScript プロパティでは、行数カウンタを宣言しています。
public int Count = 0;

2) のDetail.GenerateScript プロパティでは、行数のカウンタを更新しています。
Count++;

3) TextBox.GeneteScript プロパティでは、行数による罫線(Border)の設定をしています。

Border br = new Border();
if (Count == 1)
{
br.TopLine = new PerpetuumSoft.Framework.Drawing.BorderLine(LineStyle.Solid, System.Drawing.Color.
Black, 1);
}

///////////////////////////
if (dataBand1.IsLastLine)
{
br.LeftLine = new PerpetuumSoft.Framework.Drawing.BorderLine(LineStyle.Solid,
System.Drawing.Color.Black, 1);
br.RightLine = new PerpetuumSoft.Framework.Drawing.BorderLine(LineStyle.Solid,
System.Drawing.Color.Black, 1);
br.BottomLine = new PerpetuumSoft.Framework.Drawing.BorderLine(LineStyle.Solid,
System.Drawing.Color.Black, 1);
textBox1.Border = br;
}
else
{
///////////////////////////


if (Count % 5 == 0)
{
br.LeftLine = new PerpetuumSoft.Framework.Drawing.BorderLine(LineStyle.Solid,
System.Drawing.Color.Black, 1);
br.RightLine = new PerpetuumSoft.Framework.Drawing.BorderLine(LineStyle.Solid,
System.Drawing.Color.Black, 1);
if (Count % 20 == 0)
{
br.BottomLine = new PerpetuumSoft.Framework.Drawing.BorderLine(LineStyle.Solid,
System.Drawing.Color.Black, 1);
}
else
{
br.BottomLine = new PerpetuumSoft.Framework.Drawing.BorderLine(LineStyle.Dash, System.Drawing.
Color.Black, 1);
}
textBox1.Border = br;
}
else

{
br.BottomLine = new PerpetuumSoft.Framework.Drawing.BorderLine(LineStyle.Solid,
System.Drawing.Color.Black, 0);
br.LeftLine = new PerpetuumSoft.Framework.Drawing.BorderLine(LineStyle.Solid,
System.Drawing.Color.Black, 1);
br.RightLine = new PerpetuumSoft.Framework.Drawing.BorderLine(LineStyle.Solid,
System.Drawing.Color.Black, 1);
textBox1.Border = br;
}

///////////////////////////
}
///////////////////////////

 

48

○/○ ページといったページ番号をふりたい

Q. レポートデザイナで 「データソース」タブ->「特別なフィールド」にPageCount、PageNumberという項目がありこれを使用し○/○ページといったようにPageCount中のPageNumberページとして表現したいのですが、PageCountとPageNumberが同じ値を指してしまいます。
どうすればよいですか?
 

2011/03/03

A. はい、その場合はDocument オブジェクトのDoublePass プロパティを "True" にしてください。
PageCountとPageNumberの使い方は次の通りです。
PageNumber プロパティは、ページ番号の取得に使用します。PageCount プロパティはレポートのページ総数を格納します。

詳しい情報は、「ユーザーガイド」(製品のインストール先がデフォルトであれば「C:\Program Files\Perpetuum Software\Net ModelKit Suite\Documentation\.Net ModelKit Suite 4J User Guide.chm」)の「Report Sharp Shooter」->「ユーザーガイド」->「ページ」->「ページスタイル」->「ページ番号」に記載されておりますので、そちらをご覧ください。

この中では、DoublePass プロパティを "True" にすることでエンジンにレポートを2回読ませて1回目でその総ページ数を獲得する、といった内容です。
 

47

エンドユーザーデザイナとレポートビューアの編集機能

Q. エンドユーザーデザイナとは何ですか?
また、Liteエディションではこの機能はサポートされないのですか?
また、エンドユーザーデザイナと
レポートビューアの編集は違うのですか?
 

2011/03/03

A. はい、エンドユーザーデザイナは開発者が(デザイン時に)使用するデザイナと同じものですが、アプリケーションの実行時にデザインできる、という点が異なります。

具体的には、体験版も含めた製品に付属の、ほぼすべてのサンプルプロジェクトの実行時に表示されます「デザイン」ボタンをご確認ください。
そのクリックイベントのコードでは、
this.inlineReportSlot.DesignTemplate();
といったメソッドで「エンドユーザーデザイナ」を呼び出していることになります。

それにより表示されるデザイナーがエンドユーザデザイナということになります。ReportSharpShooterSamplesCenter サンプルにも、「使用例」->「エンドユーザーデザイナ」がございますので参考にしてください。

Liteエディションの場合は、その機能が使用できないということになります。
たとえば、Liteエディションで、先の DesignTemplate メソッドを書いたコードが実行されれば、体験版であることのダイアログや表示が行われ、一定期間(1ヶ月など)が経過すると体験版ダイアログ以降の処理も中断されることになります。

また、Report Sharp Shooter のビューア上には、編集機能があります。
操作としては、実行時にビューアのツールバーの「編集」アイコンをクリック
すると現れる画面がレポートの編集機能です。
この機能と「エンドユーザデザイナ」は別の機能です。

ビューアの編集機能は既にデータを取り込んで表示されたレポートの最終形式を直接編集できます。それに対し、エンドユーザデザイナはレポートのデザインを行うための機能です。
この両者を実際に見ていただきますとその違いがお分かりになると思います。

なお、このビューアの編集機能は、「エンドユーザデザイナ」とは異なり
Liteエディションでもご利用いただけます。
 

46

Prepareメソッド使用時のスレッドに関するエラー

Q. Visual Studio のWindowsアプリケーションで、Report Sharp Shooter の「Prepareメソッド」を使うと実行時にスレッドに関するエラーが出ます。回避策はありますか?
 

2010/10/28

A. はい、Visual Studio のWindowsアプリケーションで、ReportManagerの配置されているフォームのOwnerFormプロパティに(なし)が選択されている場合、そのようなエラーが表示されることがあります。これは、同フォームのOwnerFormプロパティにそのフォーム(例:Form1)を選択することで回避できます。
 

45

表の列数の動的な変更

Q. 表の列数をデザイン時のそれとは異なる数に変更してデータを表示することはできますか?
 

2010/10/08

A. はい、可能です。CrossBandコントロールを使ったサンプルプロジェクトをご覧ください。

【実行例】




このサンプルプロジェクトは、次のリンクよりダウンロードしてご利用ください。

DynamicColumnsSample.zip
 

44

Prepare メソッドとRenderDocument メソッド の主な違い

Q. ドキュメントを生成するためのメソッドで、PrepareメソッドとRenderDocumentメソッドがありますがその違いを教えてください。
 

2010/10/08

A. はい、主に次のような違いがあります。

(1)ドキュメントの生成中ダイアログの表示の違い

//生成中ダイアログが表示される
inlineReportSlot.Prepare();

//生成中ダイアログは表示されない
inlineReportSlot.RenderDocument();

(2)コードの実行順の違い

//Prepareメソッドの内部処理が終了しなくても
//次のコード(MessageBox.Showメソッド)が実行される
inlineReportSlot.Prepare();
System.Windows.Forms.MessageBox.Show("Hello!");

//RenderDocumentメソッドの内部処理が終了してから
//次のコード(MessageBox.Showメソッド)が実行される
inlineReportSlot.RenderDocument();
System.Windows.Forms.MessageBox.Show("Hello!");

たとえば、上記のコードで1000ページのドキュメントを作成する場合、Prepareメソッドでは1000ページのドキュメントの生成を待たずにすぐにメッセージボックスが表示されます。それに対し、RenderDocumentメソッドの場合は、1000ページのドキュメントの生成が終了してからメッセージボックスが表示されます。
 

43

一定領域内でデータに応じて動的に行数と行間隔を変える方法

Q. 下図のように、ピンクの領域に表示する行数をデータによって動的に変更したいのですが、なにか方法がありますか?
たとえば、3行だったり、7行だったりのデータをピンクの領域内に等間隔で配置したいのです。


 

2010/10/08

A. はい、データソースのデータに応じて高さが変わるサンプルを作成しました。
テキストボックスの高さの選択は、Detail4 の GenerateScript で行っています。Engine.FreeHeight はそのページの残りの空白の高さを定義します。データソースとして渡されたオブジェクトをEngine.Objects コレクションから取得できます。NumericUpDown を使用してソース内の行数を変更して正確に高さを計算し、レポートを生成し直せることを確認できます。

このサンプルプロジェクトは、次のリンクよりダウンロードしてご利用ください。

GyoTakasa.zip
 

42

レポートビューアで表示するページを指定するコード

Q. レポートビューアに表示されているレポートで指定したページを表示するコードを教えてください。
 

2010/10/08

A. ReportViewerコンポーネントのPageIndexプロパティに表示したいページを指定します。
PageIndexは0からなので、次のコードは11ページ目が表示されます。

reportViewer1.PageIndex = 10;
 

41

1ページ内に複数の表がある帳票

Q. 下図のように、1ページ内に複数の表がある帳票は作成できますか?


 

2010/10/08

A. はい、できます。
デザイナにある並列(SideBySide)コントロールを使用します。SideBySide に2つの BandContainer を配置し、表は各列に出力するので、各 BandContainer に必要な分だけ DataBand を配置します。
 

40

データを縦方向に表示する方法

Q. 下図のように、データの1レコード分を横1行ではなく、縦1列に表示する表は作成できますか?


 

2010/10/08

A. はい、できます。
Report Sharp Shooterのデザイナにあるクロスバンド(CrossBand)コントロールを利用すると簡単に実現できます。
以下にデザイン例を示します。



また、このサンプルプロジェクトを用意しましたので、どうぞ次のリンクよりダウンロードしてご利用ください。

CrossBand.zip
 

39

ヘッダーやデータバンド、Detailなどで実行時に発生するイベントの利用

Q. レポートデザイン時に作成したヘッダーやデータバンド、Detailなどで実行時に発生するイベントを利用したいのですが、何か方法はありますか?

2010/10/08

A. 次の2つの方法がございます。

(1)レポートデザイナ上でのスクリプト(コード)による設定

Report Sharp Shooterのレポートデザイナ上のHeaderオブジェクト(たとえば、header1)のGenerateScriptプロパティにheader1が生成されるタイミングで実行したいコードをGenerateScriptプロパティをクリックすると起動する「スクリプトエディタ」にC#(またはVB.NET)で記述します。「スクリプトエディタ」には変数の定義や複数行のコードを記述することができます。

たとえば、headerが生成されるたびに発生するイベント毎にメッセージボックスを表示させるには、「スクリプトエディタ」に、

<C#>
System.Windows.Forms.MessageBox.Show("Header!");

<VB.NET>
MsgBox ("Header!")

と記述して「OK」を押します。

なお、このGenerateScriptプロパティはHeaderオブジェクトに限らず、Detailオブジェクトなどほとんどのオブジェクトで使用できます。
たとえば、Detailがデータとして10行あったとすると10回イベントが発生することになりますが、記述するコードで条件判断を設け、奇数回と遇数回で別な処理をさせる、といったコーディングも可能です。

(2)VS.NET上でのコードによる設定

この方法は、Report Sharp Shooterのレポートデザイナではなく通常のVS.NET上のコードエディタで記述する方法です。

VS.NET上でReport Sharp Shooterのレポートデザイナ上の特定のオブジェクトを表現する方法の詳細は、QNo.20をご覧ください。

基本的には上記の@と同じ考え方で、GenerateScriptプロパティにイベント時のコードを文字列として記述します。

たとえば、上記(1)と同様にheaderが生成されるたびに発生するイベント毎にメッセージボックスを表示させるコード例を以下に示します。

<C#>

private void button1_Click(object sender, System.EventArgs e)
{
  PerpetuumSoft.Reporting.DOM.Document doc = new PerpetuumSoft.Reporting.DOM.Document();
  doc = InlineReportSlot1.LoadReport();

  PerpetuumSoft.Reporting.DOM.Header Head1 = new PerpetuumSoft.Reporting.DOM.Header();

  Head1 = (PerpetuumSoft.Reporting.DOM.Header)doc.ControlByName("header1");
  Head1.GenerateScript = "System.Windows.Forms.MessageBox.Show(\"Header!\");";

  //変更内容をreportSlotに保存します。
  //(これにより、実行時のデザインは変更されますが、デザイン時のデザインは変更されません)
  InlineReportSlot1.SaveReport(doc);

  //プレビュー
  if ((InlineReportSlot1 != null))
  {
    InlineReportSlot1.Prepare();
    PerpetuumSoft.Reporting.View.PreviewForm previewForm = new PerpetuumSoft.Reporting.View.PreviewForm(InlineReportSlot1);
    previewForm.WindowState = FormWindowState.Maximized;
    previewForm.ShowDialog();
    if ((previewForm != null))
    {
      previewForm.Dispose();
    }
  }
}

<VB.NET>

Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

  Dim doc As PerpetuumSoft.Reporting.DOM.Document
  doc = InlineReportSlot1.LoadReport()

  Dim Head1 As PerpetuumSoft.Reporting.DOM.Header
  Head1 = doc.ControlByName("header1")
  Head1.GenerateScript = "MsgBox (""Header!"")"

  '変更内容をreportSlotに保存します。
  '(これにより、実行時のデザインは変更されますが、デザイン時のデザインは変更されません)
  InlineReportSlot1.SaveReport(doc)

  'プレビュー
  If Not InlineReportSlot1 Is Nothing Then
      InlineReportSlot1.Prepare()
      Dim previewForm As PerpetuumSoft.Reporting.View.PreviewForm = New PerpetuumSoft.Reporting.View.PreviewForm(InlineReportSlot1)
      previewForm.WindowState = FormWindowState.Maximized
      previewForm.ShowDialog()
      If Not (previewForm Is Nothing) Then
          previewForm.Dispose()
      End If
  End If

End Sub
 

38

コードで特定のプリンタを指定して印刷させる

Q. Report Sharp Shooterで特定のプリンタを指定して印刷させるコードを教えてください。
 

2010/10/08

A. はい、Windowsの「PrintDocument」コンポーネントを利用して実現できます。
以下にコード例を示します。

//プリンタ指定
//PrintDocumentのプリンタ名を変更
printDocument1.DefaultPageSettings.PrinterSettings.PrinterName = @"\\server1\Canon LBP3300";
printDialog1.Document = printDocument1;

//ダイアログを表示せずに直接印刷
PerpetuumSoft.Reporting.Components.ReportPrintDocument document = new
PerpetuumSoft.Reporting.Components.ReportPrintDocument();
document.PrinterSettings = printDocument1.PrinterSettings;
inlineReportSlot.RenderDocument();
document.Source = inlineReportSlot;
document.Print();
 

37

日付の和暦表現

Q. Report Sharp ShooterのTextBoxに日付を表示する場合、和暦にするにはどうすればよいですか?
 

2010/10/08

A. はい、次のように設定することで実現できます。

データベースの xDate という日付型項目を、デザイン上の dataBand1 という DataBand 内のTextBox に割り当てている前提です。

TextBox の「バインド」タブの Vlaue プロパティに以下を設定します。

【平成yy年MM月dd日の場合】

"平成" + CStr(Year(dataBand1("xDate")) - 1988) + "年" +Format(dataBand1("xDate"),"MM月dd日")
 

36

Excelへのエクスポートでの3桁単位のカンマ区切りがつかない

Q. Report Sharp ShooterからExcel形式にエクスポートした場合、ビューアでは表示されていた3桁単位のカンマ区切りがつかなくなる場合があります。
どうすればよいでしょうか?
 

2010/10/08

A. はい、次の方法で回避できます。

■Report Sharp Shooter のレポートビューア上で、エクスポートする場合
「レポートのエクスポート」ダイアログでファイルの種類を「Excel(*.xls)」ではなく「Excel(Xml)(*.xls)」を選択する。

■コードを記述する場合
(C#のWebフォームの例)

using PerpetuumSoft.Reporting.Export.ExcelXml;
//を追加していただき

//ExcelExportFilter の変わりに ExcelXmlExportFilter を使う。
case "xls":
  //ExcelExportFilter xls = new ExcelExportFilter();
  ExcelXmlExportFilter xls = new ExcelXmlExportFilter();
  xls.Export(doc, m);
  Page.Response.AddHeader("Content-Disposition", "attachment; filename=Report.xls");
  Page.Response.ContentType = "application/excel";
  break;
 

35

Active Reports用のインポートツールをエンドユーザに配布してもよいか

Q. Report Sharp Shooterに付属しているActive Reports用デザインデータをReport Sharp Shooter用にインポートするツールを、作成したアプリケーションと一緒にエンドユーザに配布することはできますか?
 

2010/10/08

A. はい、できます。
Active Reports用デザインデータの
インポートツール「ActiveReportsImportWizard.exe」はエンドユーザに配布し利用させることができます。
 

34

エクスポートダイアログでファイルの種類リストに「PDF」が表示されない

Q. レポートビューアでレポートをPDFとして出力したいのですが、エクスポートダイアログの「ファイルの種類」リストに「PDF」が表示されません。どうしたらよいのでしょうか?
 

2010/10/08

A. これは、PDF用のエクスポートフィルタがVS.NETのプロジェクトに定義されていないためです。
ツールボックスのReport Sharp ShooterタブからPDFExportFilterコンポーネントを選択してフォームに追加してください。PDFExportFilterコンポーネントはPdfExportFilter1といった名前で自動的にコンポーネントトレイに配置され、レポートビューアのエクスポートダイアログの「ファイルの種類」リストに「PDF」が表示され選択できるようになります。
また、GIFやPNGなどの各イメージファイル形式以外のCSV、Excel、Html、RTFなどのエクスポートを利用する場合についてもPDFと同様に該当するコンポーネントをフォームに追加してください。
 

33

PDF出力で文字化け

Q. 作成した帳票をPDFとして出力した時に、全角文字が「□」などの文字や空白に化けてしまう箇所があります。どうしたらよいのでしょうか?
 

2010/10/08

A. これは、PDFに出力する前のReport Sharp Shooterのテンプレートファイル( .rst)内や、レポートデザイナ上でその(文字化けしている)項目に定義されているフォントの設定による現象です。
PDFで文字化けしている項目のフォント(Fontプロパティ)は、おそらく「Arial」などになっていると思います。これを、たとえば「MS ゴシック」などの全角対応フォントに変更すれば、PDFで表示した際にも正常に表示されます。
 

32

ClickOnceでレポートデザインファイル(.rst)を発行する対象にする

Q. Report Sharp Shooterを利用したアプリケーションを、ClickOnceで発行する場合、FileReportSlotで使用するレポートデザインファイル(.rst)を発行する対象に含める方法を教えてください。
 

2010/10/08

A. はい、次の通りです。
以下は、Visual StudioのIDE上での操作です。

Report Sharp ShooterのFileReportSlotのFilePathプロパティに設定してあるデザインファイル(.rst)をソリューションエクスプローラ上で、プロジェクトに加えます。
その後、そのファイル(.rst)を選択して「ビルドアクション」プロパティを「コンテンツ」に設定します。

プロジェクトのプロパティページの「発行」タブで、「アプリケーションファイル」ボタンを押します。
アプリケーションファイル ダイアログが開きます。

先のデザインファイル(.rst)の「発行の状況」を「追加(自動)」ではなく「追加」に設定します。
この方法は最も簡単で、デザインファイル(.rst)はClickOnceでのクライアントPCへのインストール時、アプリケーション本体と同じ「ClickOnce用アプリケーションフォルダ」に配置されるように設定します。

以上で、後は通常通り「発行」をすれば完了です。
 

31

グループ毎のページ数と、グループの総ページ数を出力する

Q. グループ毎にページ数と、グループの総ページ数を出力することはできますか?
次のようなイメージです。

1ページ目 : グループA  : 1/3 頁
2ページ目 : グループA  : 2/3 頁
3ページ目 : グループA  : 3/3 頁
4ページ目 : グループB  : 1/1 頁
5ページ目 : グループC  : 1/1 頁
 

2010/10/08

A. はい、できます。
サンプルプロジェクトを用意いたしました。

次のリンクよりサンプルプロジェクトをダウンロードできます。

GroupPageNumber.zip

サンプルプロジェクトでは、以下の設定でお客様が言われる内容を実現しています。この設定は、全てそのデザイン(template.rst)上で設定しています。

1. Document.DoublePass = true に設定する。
2. グループの始めのページ番号を格納し、グループ毎にページ番号を計算するには
  Document.CommonScript プロパティに配列を2つ作成する。
3. 最初のパス時に先頭のページ番号をヘッダーの GroupBand に記憶させる。
4. 最初のパス時にグループ毎のページ番号をフッターの GroupBand で計算する。
5. セカンドパス時にグループ毎のページのデータを出力する。

【デザインを表示するには】

このサンプルプロジェクトでは、fileReportSlot1のFilePathでデザインファイル「template.rst」を指定しています。
デザインを表示するには、実行時に上部の「デザイン」ボタンを押すか、デザイン時に、Form1→reportManager1をダブルクリック→fileReportSlot1をダブルクリック→デザイナ上で「ファイルメ」ニュー→「開く」で、「template.rst」を指定してください。

【DoublePass(ダブルパス)について】

DoublePass(ダブルパス)プロパティは、今回のグループごとのページの分母のように1回レポートを生成してみて獲得した値を、再度(二回目の)レポートの生成を行いその値をレポートの表示に生かすような場合に利用します。DoublePassプロパティをTrueにすると2回目のレポート生成を行います。

DoublePass(ダブルパス)の使い方については、ユーザガイド(NETModelKitSuiteUserGuide.chm)で「DoublePass」や「ダブルパス」で検索し、ヒットするコンテンツをご覧ください。
 

30

配列をデータソースとして利用する

Q. Report Sharp Shooter でデータソースとして配列を利用できますか?また、その方法を教えてください。
 

2010/10/08

A. はい、Report Sharp Shooterでは配列データもデータソースとして利用できます。

サンプルプロジェクトを用意いたしました。
これは、実行時にコードで2次元・1次元の配列をデータソースとして指定し、
ReportSlotを経由してReportViewerに渡し、配列の表とグラフを表示しています。このサンプルでは、Report Sharp Shooterに組み込みのチャートコンポーネントを利用しています。

次のリンクよりサンプルプロジェクトをダウンロードできます。

ArrayAndChart.zip
 

29

チャートコントロールに無い、ガントチャートやレーダーチャートをレポートに表示したい

Q. Report Sharp Shooter で利用できるチャートコントロールにガントチャートやレーダーチャートがありません。どうすればよいですか?
 

2010/10/08

A. はい、それらはチャートコントロールには含まれておりません。しかし、弊社製品に「TeeChart Pro .NET」というグラフ・チャートコンポーネントがございます。それと連動させてレポート上にガントチャートやレーダーチャートを表示することができます。
次のリンクよりそのサンプルプロジェクトをダウンロードできます。

TeeChartReportControl.zip

Report Sharp Shooterのレポートビューア上に、弊社製品のグラフ作成コンポーネント「TeeChart Pro .NET」を使用してガントチャートを表示するサンプルプロジェクトです。実行時に、ランダムデータで動的にガントチャートを生成しそのグラフイメージをレポートに表示しています。
Report Sharp ShooterのreportManager1では、FileReportSlotを利用しており、bin\Debug内でEXEが動作する前提でFilePathプロパティは、"..\..\Template.rst"を指定してあります。
グラフ作成の詳細につきましては、プロジェクト内の「TeeChartControl.cs」のコードをご覧ください。
なお、このフォルダに含まれているグラフ作成コンポーネント「TeeChart Pro .NET」のモジュール(TeeChart.dll)は体験版です。

以上の内容は解凍された「TeeChartReportControl」フォルダの「Readme.txt」にも記載してあります。
 

28

製品版なのに体験版ダイアログが表示される

Q. 体験版ではない製品版のライセンス登録を行ったReport Sharp Shooter を含む.NET ModelKitを使用したアプリケーションをエンドユーザの実行環境で起動すると体験期間を示すダイアログ表示される場合があります。どうしたらよいですか?
 

2010/10/08
(2012/09/04修正)

A. はい、それはプロジェクト内にある「licenses.licx」ファイルが関係しています。.NET ModelKitに限らず市販のコンポーネントをフォームに配置するとVisual Studioによってそのコンポーネントが自動的に「licenses.licx」にリスト(記述)されます。
しかし、フォームに配置せず実行時に新しいインスタンスを作成して利用するようなコードを記述してある場合は、「licenses.licx」にそのコンポーネントの記載はありません。
そういった場合にそのコンポーネントのライセンスが見当たらないため「体験版」などのダイアログが表示される仕組みになっているのです。
これを回避するためには、Visual Studioに頼らず必要なコンポーネントをあらかじめ「licenses.licx」ファイルに記載しておけばよいのです。

以下に、.NET ModelKitで使用するコンポーネントを製品別に記載します。必要部分をそのまま、「licenses.licx」に記載してください。

なお、この際、licenses.licx上の各行で、「Version=3.9.0.2,
 Culture=neutral, PublicKeyToken=8a6ae・・・・・・」、といった「Version=・・・」以降の記述がある場合はそれもカットしてください。

(例)

PerpetuumSoft.Reporting. Designer.ReportDesigner,
 PerpetuumSoft.Reporting, Culture=neutral,
 
Version=3.9.0.2, PublicKeyToken=8a6ae・・・・・・

を次のようにします。

PerpetuumSoft.Reporting. Designer.ReportDesigner,
 PerpetuumSoft.Reporting, Culture=neutral

含まれる製品 コンポーネント名 licenses.licx上の記載
Report Sharp Shooter(全エディション)
および
ModelKit Suite
ReportManager PerpetuumSoft.Reporting.
Designer.ReportDesigner,
PerpetuumSoft.Reporting, Culture=neutral


PerpetuumSoft.Reporting.
Components.ReportManager,
PerpetuumSoft.Reporting, Culture=neutral
Report Sharp Shooter(LiteおよびWebを除く全エディション)
および
ModelKit Suite
ReportDesigner
(RSS.
RunTimeDesigner)
PerpetuumSoft.Reporting.
Components.ReportManager,
PerpetuumSoft.Reporting, Culture=neutral


PerpetuumSoft.Reporting.
Designer.ReportDesigner,
PerpetuumSoft.Reporting, Culture=neutral
Report Sharp Shooter(Webを除く全エディション)
および
ModelKit Suite
ReportViewer
(RSS.Win)
PerpetuumSoft.Reporting.
View.ReportViewer,
PerpetuumSoft.Reporting, Culture=neutral
Report Sharp Shooter(Lite,Winを除く全エディション)
および
ModelKit Suite
SharpShooter
WebViewer
(RSS.Web)
PerpetuumSoft.Reporting.
Web.SharpShooterWebViewer,
PerpetuumSoft.Reporting.Web, Culture=neutral
OLAP ModelKit
および
ModelKit Suite
DataCube PerpetuumSoft.Olap.DataCube,
PerpetuumSoft.Olap,
Culture=neutral
Instrumentation ModelKit(Webを除く全エディション)
および
ModelKit Suite
Widget
(IMK.Win)
PerpetuumSoft.Instrumentation.
Windows.Forms.Widget,
PerpetuumSoft.Instrumentation, Culture=neutral
Instrumentation ModelKit(Winを除く全エディション)
および
ModelKit Suite
WidgetProducer
(IMK.Web)
PerpetuumSoft.Instrumentation.
Web.WidgetProducer,
PerpetuumSoft.Instrumentation.
Web,Culture=neutral
Chart ModelKit(Webを除く全エディション)
および
ModelKit Suite
ChartViewer
(Chart.Win)
PerpetuumSoft.Charts.Windows.
Forms.ChartViewer, PerpetuumSoft.Charts,
Culture=neutral
Chart ModelKit(Winを除く全エディション)
および
ModelKit Suite
WebChartViewer
(Chart.Web)
PerpetuumSoft.Charts.Web.
WebChartViewer,
PerpetuumSoft.Chart.Web,
Culture=neutral
Report Sharp Shooter for Silverlight
および
ModelKit Suite
ReportServices (RSS.Silverlight) PerpetuumSoft.Reporting.
Silverlight.Server.ReportServiceBase, PerpetuumSoft.Reporting.
Silverlight.Server,
Culture=neutral

 

27

メタフレームでの動作

Q. メタフレーム(XenApp)環境で動作しますか?データベースをOracleで構築し、抽出したデータをC#側のDataSetに入れる予定です。また、メタサーバのOSをWindows Server 2008(x64)を予定しておりますが、問題ないでしょうか。
 

2010/10/08

A. はい、Report Sharp Shooter はデータソースとしてSQL データソース、XML データソース、ビジネスオブジェクト、.Net オブジェクト(DataSet)を使用できます。お客様のご予定のように、メタフレーム(XenApp)からのデータをDataSetとして使用できるのであれば、Report Sharp Shooter でレポートをデザインすることができます。

Report Sharp Shooter のアセンブリはビルドオプション - プラットフォームターゲット「Any CPU」でビルドされているため、Windows Server 2008 (x64)では64ビットアプリケーションとして運用することができます。
 

26

実行時のプリンタの用紙サイズの初期値をコードで設定

Q. 印刷ダイアログの表示時、エンドユーザが「プロパティ」などで設定変更をしなくていいように、コードで用紙サイズの初期値を特定のサイズに指定できますか?
 

2010/10/08
(2012/04/16更新)

A. はい、できます。その方法自体はほとんどVisual Studio の機能で、Report Sharp Shooterとは直接関係ありませんが、以下にサンプルコードを示します。

まず、フォーム上には次のコンポーネントが配置してある前提です。

Report Sharp ShooterのreportManager(inlineReportSlot)コンポーネント
WindowsフォームのpageSetupDialogコンポーネント
WindowsフォームのprintDialogコンポーネント
WindowsフォームのprintDocumentコンポーネント
実行用のコマンドボタン(button1)コントロ-ル

private void button1_Click(object sender, EventArgs e)
{
  int index = 0;
  PrinterSettings ps = new PrinterSettings();

  foreach (PaperSize psi in ps.PaperSizes)
  {
    if (psi.Kind == PaperKind.A3)
    //A3の場合(これを「B4」など目的の用紙サイズに設定する)
    {
      //PrintDocumentの用紙サイズを変更
      PrinterSettings.PaperSizeCollection psizeCollection =
printDocument1.PrinterSettings.PaperSizes;
      printDocument1.DefaultPageSettings.PaperSize = psizeCollection[index];
      break;
    }
    index++;
  }

  printDialog1.Document = printDocument1;

  //印刷ダイアログの表示

  try
  {
    if (printDialog1.ShowDialog() == DialogResult.OK)
      {
        PerpetuumSoft.Reporting.Components.ReportPrintDocument document = new
PerpetuumSoft.Reporting.Components.ReportPrintDocument();

        // **DefaultPageSettingsの設定 **
        document.DefaultPageSettings = printDialog1.Document.DefaultPageSettings;


        document.PrinterSettings = printDialog1.PrinterSettings;
        inlineReportSlot.RenderDocument();
        document.Source = inlineReportSlot;
        document.Print();
      }
    }

  catch (Exception ex)
  {
  MessageBox.Show(ex.Message, "Report Sharp-Shooter", MessageBoxButtons.OK,
MessageBoxIcon.Error);

  }
}
 

25

実行時のデータ関連処理のコード

Q. 実行時に、データの接続やレポートとの関連付けを行いプレビューする一連のコードサンプルはありますか。
 

2010/10/08

A. はい、Report Sharp Shooter 4Jのサンプルプロジェクトの
(デフォルトでは)C:\ProgramFiles\PerpetuumSoftware\NetModelKitSuite
\Samples\Report Sharp-Shooter\VisualBasic
に「Seikyu」があります。
このサンプルはVB.NET用のみですがそちらを参考にしてください。

このサンプルでは、実行時にデータに関連する処理を全てコードで実現しています。
データ接続の作成、データコマンド(SQLクエリ)の作成、データアダプタの作成、データセットの作成・読み込み、ReportManagerのデータソースの追加、DataBandのデータソースの設定、そしてレポートのプレビューといった一連の簡単なコードを記述しています。
 

24

Pageオブジェクトの左マージン

Q. デザイン上のPageオブジェクトのMargins.Left(Margins.Right)プロパティに設定した値が実行時に反映されません。なぜですか、回避策はありますか?
 

2010/10/08

A. Report Sharp Shooterのページの水平方向(左右)の余白(マージン)は、PageオブジェクトのMargins.Left(Margins.Right)プロパティでは設定できません。
PageオブジェクトのMargins.Left(Margins.Right)プロパティは、クロスバンドオブジェクト専用のマージンで、残念ながらこれは仕様です。
Pageオブジェクトの垂直方向のマージンはMargins.Top(Margins.Bottom)プロパティで設定できます。

以下にPageオブジェクト上の全ての(TextBoxなどの)ビジュアルオブジェクトを一括で現在位置から左右にシフトする、実質Pageオブジェクトの左マージンを指定するコードを掲載いたしますのでご利用ください。

【Report Sharp Shooter のLeftマージン実装について】

■機能
デザインのページ上の全ての(ビジュアル)オブジェクトの左位置(Location.Xプロパティ)を
指定した数量分、現在位置より移動する。

■書式

<C#>
public PerpetuumSoft.Reporting.DOM.Document ShiftLeft(PerpetuumSoft.Reporting.DOM.Document document, double shift)

<VB.NET>
Public Function ShiftLeft(ByVal document As PerpetuumSoft.Reporting.DOM.Document, ByVal shift As Double) As PerpetuumSoft.Reporting.DOM.Document

■引数

document:
処理するドキュメントを指定。

shift:
移動する量。単位はcm。正の数で右へ、負の数で左へ移動する。

■コード例

※「ShiftLeftメソッド実装クラス」はブラックボックスとして、また必要に応じてDLLなどにしてご利用ください。

<C#>

//---------------------------------------------
//呼び出し側コード例
//---------------------------------------------

private void button3_Click(object sender, EventArgs e)
{
    PerpetuumSoft.Reporting.DOM.Document document = reportSlot.LoadReport();
    Rss_ShiftElements.RssShiftElements rse = new Rss_ShiftElements.RssShiftElements();

    rse.ShiftLeft(document, 1.5); //右へ1.5(cm)移動

    reportSlot.SaveReport(document);
    reportSlot.Prepare();

    using(PerpetuumSoft.Reporting.View.PreviewForm previewForm = new PerpetuumSoft.Reporting.View.PreviewForm(reportSlot))
    {
        previewForm.WindowState = FormWindowState.Maximized;
        previewForm.ShowDialog(this);
    }

}

//---------------------------------------------
//ShiftLeftメソッド実装クラス
//---------------------------------------------

using System;
using System.Collections.Generic;
using System.Text;

using PerpetuumSoft.Framework.Drawing;
using PerpetuumSoft.Reporting.DOM;
using ContainerControl = PerpetuumSoft.Reporting.DOM.ContainerControl;
using PerpetuumSoft.Reporting.Components;


namespace Rss_ShiftElements
{
    class RssShiftElements
    {
        //コンストラクタ
        public RssShiftElements() { }

        //左シフトメソッド
        public Document ShiftLeft(Document document, double shift)
        {
            double shiftInInternalUnit = Unit.Convert(shift, Unit.Centimeter, Unit.InternalUnit);
            foreach (Page page in document.Pages)
            {
                SetNewLocation(page, shiftInInternalUnit);
            }
            return document;
        }

        private void SetNewLocation(ReportControl control, double shift)
        {
            ContainerControl containerControl = control as ContainerControl;
            if (containerControl != null)
            {
                foreach (ReportControl reportControl in containerControl.Controls)
                {
                    SetNewLocation(reportControl, shift);
                }
            }

            VisualControl visualControl = control as VisualControl;
            if (visualControl != null)
            {
                visualControl.Location = new Vector(visualControl.Location.X + shift, visualControl.Location.Y);
                return;
            }
        }

    }
}


<VB.NET>

'---------------------------------------------
'呼び出し側コード例
'---------------------------------------------

Imports Rss_ShiftElements

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

    Dim document As PerpetuumSoft.Reporting.DOM.Document = reportSlot.LoadReport()
    Dim rse As Rss_ShiftElements.RssShiftElements = New Rss_ShiftElements.RssShiftElements()

    rse.ShiftLeft(document, -0.5) '左へ0.5(cm)移動
    reportSlot.SaveReport(document)
    reportSlot.Prepare()

    Dim previewForm As PerpetuumSoft.Reporting.View.PreviewForm
    previewForm = New PerpetuumSoft.Reporting.View.PreviewForm(reportSlot)
    previewForm.WindowState = FormWindowState.Maximized
    previewForm.ShowDialog(Me)

    If Not (previewForm Is Nothing) Then
        previewForm.Dispose()
    End If

End Sub

'---------------------------------------------
'ShiftLeftメソッド実装クラス
'---------------------------------------------

Imports System
Imports System.Collections.Generic
Imports System.Text

Imports PerpetuumSoft.Framework.Drawing
Imports PerpetuumSoft.Reporting.DOM
Imports ContainerControl = PerpetuumSoft.Reporting.DOM.ContainerControl
Imports PerpetuumSoft.Reporting.Components

Namespace Rss_ShiftElements
    Class RssShiftElements
   
        'コンストラクタ
        Public Sub New()
        End Sub

        '左シフトメソッド
        Public Function ShiftLeft(ByVal document As Document, ByVal shift As Double) As Document
            Dim shiftInInternalUnit As Double = Unit.Convert(shift, Unit.Centimeter, Unit.InternalUnit)
            Dim page As Page

            For Each page In document.Pages
                SetNewLocation(page, shiftInInternalUnit)
            Next

            Return document

        End Function

        Private Sub SetNewLocation(ByVal control As ReportControl, ByVal shift As Double)

            Dim containerControl As ContainerControl = TryCast(control, ContainerControl)
   
            If Not containerControl Is Nothing Then
                Dim reportControl As ReportControl
                For Each reportControl In containerControl.Controls
                    SetNewLocation(reportControl, shift)
                Next
            End If

            Dim visualControl As VisualControl = TryCast(control, VisualControl)
   
            If Not visualControl Is Nothing Then
                visualControl.Location = New Vector(visualControl.Location.X + shift, visualControl.Location.Y)
                Return
            End If

        End Sub

    End Class
End Namespace
 

23

レポートビューア上のページ番号を取得

Q. 実行時に、レポートビューア(ReportViewer)上の任意のページをクリックした場合にそのページ番号を取得する方法を教えてください。
 

2010/10/08

A. はい、ReportViewerのPageIndexプロパティをご利用ください。
このPageIndexプロパティは、最初は(1ではなく)0から始まります。

以下は、ReportViewer1_ViewObjectClickイベントでのコード例です。

 Private Sub ReportViewer1_ViewObjectClick(ByVal Sender As Object, ByVal e As PerpetuumSoft.Reporting.View.ReportViewEventArgs) Handles ReportViewer1.ViewObjectClick

    Dim Page As Integer
    Page = ReportViewer1.PageIndex + 1
    MessageBox.Show(" ページ=" + CStr(Page))
    e.Handled = True

End Sub
 

22

レポートビューア上の一覧データの行番号を取得

Q. DataBandとに連動してレポートビューア(ReportViewer)に表示されている一覧データで、(最上行に表示されるデータを1行目として)ビューア上の任意のデータをクリックした場合にその行番号を取得する方法を教えてください。
 

2010/10/08

A. この場合、データを表示するTextBox(オブジェクト)の縦方向の位置情報を基にして
計算により「行」を表すことができます。

また、ドキュメントのページ上にある要素の位置は次のように取得できます。
e.Control.Location.ConvertUnits(PerpetuumSoft.Framework.Drawing.Unit.InternalUnit,
PerpetuumSoft.Framework.Drawing.Unit.Centimeter)

以下は、ReportViewer1_ViewObjectClickイベントでのコード例です。

Private Sub ReportViewer1_ViewObjectClick(ByVal Sender As Object, ByVal e As PerpetuumSoft.Reporting.View.ReportViewEventArgs) Handles ReportViewer1.ViewObjectClick

If (e.Control.GetType() Is GetType(PerpetuumSoft.Reporting.DOM.TextBox)) Then
    '------------------------------------------------------
    Dim Pos As PerpetuumSoft.Framework.Drawing.Vector
    Dim Offset As Double
    Dim Takasa As Double
    Offset = 5 '余白、タイトル、見出などの高さ
    Takasa = 0.5 'TextBoxの高さ
    Pos = e.Control.Location.ConvertUnits(PerpetuumSoft.Framework.Drawing.Unit.InternalUnit, PerpetuumSoft.Framework.Drawing.Unit.Centimeter)
    MessageBox.Show(" 行=" + CStr(CInt((Pos.Y - Offset) / Takasa + 1)))
    '------------------------------------------------------
    e.Handled = True
End If

End Sub

次のリンクよりサンプルプロジェクト
(VB.NET 2005)をダウンロードできます。

ViewerLinePosition.zip

【注意事項】
この場合、サイズを取得するTextBoxが含まれる詳細セクションやヘッダセクションのCanGrow、CanShrink、GrowToBottomの各プロパティをFalseにして、計算要素の「高さ」が実行時に動的に変わらないように固定しておく必要があります。

また、たとえば、実行時に最初のページだけに表示されるもの(見出しなど)を設定している場合、2ページ目以降はTextBoxの位置が変わるので、ページによってそれを考慮する必要があります。
その場合、全ページにそれら(見出しなど)を常に表示することが最も簡単です。
 

21

デザイナ上のグリッドの間隔調整

Q. レポートデザイナでグリッドの間隔を調整することはできるのでしょうか。間隔が広すぎて思うように配置できないのです。
 

2010/10/08

A. はい、デザイナのグリッドは任意のピッチに設定できます。
Documentオブジェクト(デフォルトでは「doc1」)のGridStepプロパティを利用します。デフォルトでは、0.5cm(5mm)ですが、もっと狭く
0.1(1mm)などと設定できます。

また、デザイナの「表示」メニューの「グリッドに合わせる」や
DocumentオブジェクトのSnapToGridプロパティで、オブジェクト(
たとえばTextBoxなど)をグリッドに合わせて配置するかどうか
を設定できます。
 

20

明細行の高さを自動調整

Q. 明細の表示(印刷)でテキストボックスの内容により、行としての高さを自動調整できますか?

たとえば、次のようなイメージです。


 

2010/10/08

A. はい、できます。次の通り、設定してください。

■内容を表示(印刷する)TextBoxオブジェクト、および同一行(Detail)上のTextBoxオブジェクトの設定

・CanGrow、CanShrinkプロパティをTrueに設定
・GrowToBottomプロパティをTrueに設定
 GrowToBottomプロパティは1Detail(1行)内で最も高さが高いオブジェクトに高さを自動的に合わせるかどうかを設定します。
・必要に応じて各TextBoxオブジェクトの文字配置をTextAlignプロパティで設定
・必要に応じて各TextBoxオブジェクトに枠線を描くならBorderプロパティを設定

■(上記のTextBoxが配置されている)Detailオブジェクトの設定

・CanGrow、CanShrinkプロパティをTrue
 これにより、コンテナ(土台)となる1Detail(1行)単位で自動的に高さの伸縮が行われます。
 

19

レポートデザイン上の項目の値を実行時に変更するコード(DataBandと連動している項目の場合)

Q. 同一レイアウトに、表示する内容を変えて出力したいと考えています。
たとえば、区分が01の商品は商品欄に「メーカ名+商品名」を出力し、区分が02の商品は「商品コード+商品名」を出力する、といった場合です。実現する方法を教えてください。
 

2010/10/08

A. 最も簡単なのは、レポートデザイン上でその「商品欄」にあたるTextBoxのGenerateScriptプロパティを利用する方法です。
GenerateScriptプロパティには、VB.NETやC#のコードをそのまま記述できます。(記述言語は、DocumentオブジェクトのScriptLanguageプロパティで設定します)

GenerateScriptプロパティに記述されたコードは、実行時に実際にドキュメントやオブジェクト(コントロール)が生成される直前に実行されます。
たとえば、次のように記述します。

(VB.NET)

Select Case dataBand1("Kubun")
Case "01"
    TextBox1.text=dataBand1("MakerName")+"/"+dataBand1("ProductName")
Case "02"
    TextBox1.text=dataBand1("ProductCode")+"/"+dataBand1("ProductName")
End Select
 

18

レポートデザイン上の項目の値を実行時に変更するコード(DataBandと連動していない項目の場合)

Q. デザイン時に設定したレポートデザイン上の項目の値を、実行時に変更するコードはどう書きますか?
 

2010/10/08

A. はい、以下を参考にしてください。

以下のコードでは、レポートデザイン上のテキストボックス「textBox4」の値をプレビュー前に"テキスト4"という文字列に設定しています。
デザイン上の項目を指定するには、ControlByNameメソッドを利用します。

(VB.NET)

Dim doc As PerpetuumSoft.Reporting.DOM.Document
doc = InlineReportSlot1.LoadReport()

Dim TB4 As PerpetuumSoft.Reporting.DOM.TextBox

TB4  = doc.ControlByName("textBox4")

TB4 .Text = "テキスト4"

'変更内容をreportSlotに保存します。
'(これにより、実行時のデザインは変更されますが、デザイン時のデザインは変更されません)
InlineReportSlot1.SaveReport(doc)

'プレビュー
If Not InlineReportSlot1 Is Nothing Then
    InlineReportSlot1.Prepare()
    Dim previewForm As PerpetuumSoft.Reporting.View.PreviewForm = New PerpetuumSoft.Reporting.View.PreviewForm(InlineReportSlot1)
    previewForm.WindowState = FormWindowState.Maximized
    previewForm.ShowDialog()
    If Not (previewForm Is Nothing) Then
        previewForm.Dispose()
    End If
End If


(C#)

PerpetuumSoft.Reporting.DOM.Document doc = new PerpetuumSoft.Reporting.DOM.Document();
doc = InlineReportSlot1.LoadReport();

PerpetuumSoft.Reporting.DOM.TextBox tb4 = new PerpetuumSoft.Reporting.DOM.TextBox();

tb4 = (PerpetuumSoft.Reporting.DOM.TextBox)doc.ControlByName("textBox4");
tb4.Text = "テキスト4";

//変更内容をreportSlotに保存します。
//(これにより、実行時のデザインは変更されますが、デザイン時のデザインは変更されません)
InlineReportSlot1.SaveReport(doc);

//プレビュー
if ((InlineReportSlot1 != null))
{
  InlineReportSlot1.Prepare();
  PerpetuumSoft.Reporting.View.PreviewForm previewForm = new PerpetuumSoft.Reporting.View.PreviewForm(InlineReportSlot1);
  previewForm.WindowState = FormWindowState.Maximized;
  previewForm.ShowDialog();
  if ((previewForm != null))
  {
    previewForm.Dispose();
  }
}
 

17

基本コード(プレビュー・デザイン・印刷)

Q. レポートをプレビュー、デザイン表示、印刷するコードを教えてください。
 

2010/10/08

A. はい、以下を参考にしてください。

フォームには、四つのボタンとReportManagerコントロールがあってその中に「InlineReportSlot1」という名前のInline型のReportSlotがあって、レポートデザインされているという前提です。

(VB.NET)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

'プレビュー
If Not InlineReportSlot1 Is Nothing Then
    InlineReportSlot1.Prepare()
    Dim previewForm As PerpetuumSoft.Reporting.View.PreviewForm = New PerpetuumSoft.Reporting.View.PreviewForm(InlineReportSlot1)
    previewForm.WindowState = FormWindowState.Maximized
    previewForm.ShowDialog()
    If Not (previewForm Is Nothing) Then
        previewForm.Dispose()
    End If
End If

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

'デザイン
If Not InlineReportSlot1 Is Nothing Then
    InlineReportSlot1.DesignTemplate()
End If

End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

'印刷(ダイアログ表示)
Try
Dim dialog As PrintDialog = New PrintDialog
If (dialog.ShowDialog = DialogResult.OK) Then
    Dim document As New PerpetuumSoft.Reporting.Components.ReportPrintDocument
    document.PrinterSettings = dialog.PrinterSettings
    InlineReportSlot1.RenderDocument()
    document.Source = InlineReportSlot1
    document.Print()
End If
Catch ex As Exception
    MessageBox.Show(ex.Message, "Report Sharp-Shooter", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try

End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

'印刷(ダイアログ非表示)
Try
    Dim document As New PerpetuumSoft.Reporting.Components.ReportPrintDocument
    document.PrinterSettings = New System.Drawing.Printing.PrinterSettings
    InlineReportSlot1.RenderDocument()
    document.Source = InlineReportSlot1
    document.Print()
Catch ex As Exception
    MessageBox.Show(ex.Message, "Report Sharp-Shooter", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try

End Sub
 

16

Report Sharp Shooter 1.8J から4Jへの移行

Q. 前バージョン1.8Jで作成したプロジェクトの4Jへの移行方法を教えてください
 

2010/10/08

A. はい、以下のリンクより「前のバージョン( Report Sharp Shooter 1.8J )からの移行手順」(PDFファイル)をご覧ください。

ikou.pdf

 

15

フォームにReport Sharp Shooterのコンポーネントを配置しないプログラム

Q. フォームを一切使用せずに、コードだけでReport Sharp Shooterを利用したプログラムを作成することができますか?
 

2010/10/08

A. はい、Report Sharp Shooterはフォームに依存しない形で帳票を作成・出力できます。
サンプルプロジェクト(VB.NET 2005)を作成いたしました、次のリンクよりダウンロードできます。

CreateReport.zip

【簡単な説明】
 
1.デザイナの起動方法

フォームを一切使用しないので、フォーム上にはReport Sharp Shooterのコンポーネントを配置できません。フォームからデザイナを起動できませんが、次の方法を使います。

帳票のデザインは、Visual StudioのIDEを使わずにレポートデザイナ「ReportDesigner.exe」でデザインできます。
(デフォルトでは、C:\Program Files\Perpetuum Software\Net ModelKit Suite\Binにあります。)


●新規作成時

レポートデザイナ「ReportDesigner.exe」を実行し、編集後保存します。

●既存レポートデザインの変更、流用時

レポートデザイナ「ReportDesigner.exe」を実行後、「ファイル」メニューより「開く」で既存「.rst」ファイルを選択します。
また、対象の「.rst」ファイルをダブルクリックするだけで、デフォルトで拡張子が関連付けされているレポートデザイナ「ReportDesigner.exe」が自動的に起動します。

2.データベース上のテーブルなどとレポートデザイン上のDataBandコントロールなどの関連付けについて

レポートデザインで使用するデータと(フォームのない)コードで使用するデータを関連付ける必要があります。

ダウンロードしたサンプルプロジェクトのModule1.vbのSub Main()をご覧ください。フォームを使用しないため、ReportManagerやFileReportSlot などをコードで作成し、

manager.DataSources.Add("Customers", table)

で、データソースとして「Customers」テーブルを指定しています。
このテーブルをレポートデザイン時にも指定します。

Report Sharp Shooterのデザイナを起動してサンプルデザインをご覧ください。

dataBand1のDataSourceプロパティには「Customers」テーブルが指定してあります。
また、
detail1_CustomersDataSet_Customers_Name
detail1_CustomersDataSet_Customers_Phone
のTextBoxの「バインド」のValueプロパティにそれぞれ
GetData("Customers.Name")
GetData("Customers.Phone")
を設定しています。つまり、
CustomersテーブルのNameフィールドと
CustomersテーブルのPhoneフィールドをそれそれ指定しています。

コード:

 Sub Main()

'ReportManagerの新規作成
Dim manager As ReportManager = New ReportManager()
'FileReportSlotの新規作成
Dim reportSlot As FileReportSlot = New FileReportSlot()
'FileReportSlotをReportManagerに登録
manager.Reports.Add(reportSlot)
'FileReportSlotのテンプレート(デザイン)ファイルのパスを設定
reportSlot.FilePath = "..\..\GettingStartedExample.rst"

'インメモリデータのテーブル作成
Console.WriteLine("インメモリデータのテーブル作成")
Dim table As DataTable = New DataTable()
table.Columns.Add("Name")
table.Columns.Add("Phone")
Dim row As DataRow = table.NewRow()
row("Name") = "Johnson Leslie"
row("Phone") = "613-442-7654"
table.Rows.Add(row)
row = table.NewRow()
row("Name") = "Fisher Pete"
row("Phone") = "401-609-7623"
table.Rows.Add(row)
row = table.NewRow()
row("Name") = "Brown Kelly"
row("Phone") = "803-438-2771"
table.Rows.Add(row)

'ReportManagerへのDataSourceの追加
Console.WriteLine("ReportManagerへのDataSourceの追加")
manager.DataSources.Add("Customers", table)

'最終ドキュメントの生成
Console.WriteLine("最終ドキュメントの生成")
Dim doc As Document = reportSlot.RenderDocument()

'最終ドキュメントの保存
Console.WriteLine("最終ドキュメントの保存")
'FileReportSlotの最終ドキュメントファイルのパスを設定
reportSlot.FilePath = "..\..\GettingStartedExample.rsd"
reportSlot.SaveReport(doc)

Console.WriteLine("保存した最終ドキュメント(.rsd)ファイルをビューアで表示します" & vbCrLf & "Hit any key...")
Console.Read()
'保存した最終ドキュメント(.rsd)ファイルをビューアで表示
Process.Start("..\..\GettingStartedExample.rsd")

End Sub
 

Q. また、同様にフォームを一切使用せずに、コードだけで最終ドキュメントをPDF出力する方法を教えてください
 

A. .はい、上記サンプルプロジェクト を一部変更して、別のサンプルプロジェクトを作成いたしました、次のリンクよりダウンロードできます。

CreateReport2.zip

どうぞ、ご利用ください。

コード:(一部)

 'PDF出力
Dim PdfExport As PdfExportFilter = New PdfExportFilter()
Dim fileName As String

fileName = "c:\Test.pdf"
PdfExport.Export(reportSlot.Document, fileName, True) 'PDFオプションダイアログ表示
'PdfExport.Export(reportSlot.Document, fileName, False) 'PDFオプションダイアログ非表示

'PDFの表示
If File.Exists(fileName) Then
    Process.Start(fileName)
End If
 

14

.NET Model Kit Suiteをインストールできません

Q. Windows Vistaに.NET Model Kit Suiteをインストールしようとしているのですが、次のメッセージが表示されインストールできません。
回避方法を教えてください。


 

2010/10/08

A. エクスプローラーなどでsetup.exeを右クリックし、"管理者として実行"を選択してインストールしてください。
 

13

レポートに独自のクラスを使用する

Q. Common Script の宣言でクラスを入力してレポートに独自のクラスを使用できますか?
あるいはSystem.Windows.Formを作成し、たとえばクエリのパラメータとしてフィールド値を使用して、データバンドの代わりに常にコードでフォームやフィールドと動作させることは可能ですか?

Visual Studio .NET でフォームを作成し、フォームを表示するためにコードをReport Sharp Shooter にコピー&ペーストできますか?
 

2010/10/08

A. はい、クラスを宣言し、宣言したクラスのオブジェクトやSystem.Windows.Forms.Formクラスのオブジェクトを作成し、レポートにそのフィールドを使用できます。WinFormsControl はレポートにコントロールを表示するために使用できます。
 

12

セッション変数の使い方

Q.セッション変数をこのサンプルでどのように使えばよいでしょうか?
メインページからセッション変数の値を送って、作成したpdfファイルでパラメータとして使いたい。
 

2010/10/08

A.次のリンクレポートパラメータとしてセッション変数を使用したサンプルプロジェクトをダウンロードできます。

SessionVariable.zip

 

11

グループごとにページ番号を設定する

Q. 各グループが1ページで始まるようにグループごとにページ番号を設定したい。どうすればできますか?
 

2010/10/08

A. PageNumber を変更できますが、DocumentのCommonScriptに独自の変数を宣言し、それをGenerateScriptのPageFooterの各ページの末尾にインクリメントさせ、そのグループのGenerateScriptのHeader にその値を再設定しなければなりません。
 

Q. やってみましたが、グループごとにページ番号を設定できません。
ページヘッダーに表示される値が常に0になります。
次のことを行いました。

Declare int x in Document Common Script(DocumentのCommon Scriptにint xを宣言)
x = x+1 in page footer generate script (ページフッターのgenerate scriptにx = x+1を設定)
x = 0 in group header generate script. (グループヘッダーのgenerate scriptにx = 0を設定)

ページヘッダーには、値xのテキストボックスがあって、常に0になります。
何が違うのでしょうか?
 

A.次のリンクからサンプルプロジェクトをダウンロードしてください。

GroupsResetPages.zip

 

10

データバンド内の複数のグループバンド

Q. 1つのデータバンドにグループバンドを2つ配置できますか?

2010/10/08

A. データバンドに複数のグループバンドを配置することはできません。データバンドを2つ使うか、グループバンドの中に別のグループバンドを配置してください。
 

9

レポートをPDF形式でPreviewForm にプレビューする

Q. レポートをPDF 形式でPreviewFormにプレビューするにはどうすればよいですか?もしくは、PDF 形式でレポートをプレビューする方法はありますか?Windowsアプリケーションのプロジェクト(C#)でレポートをプレビューするために新しいWinFormを開きたい。
 

2010/10/08

A. 次のコードで解決できます。
PerpetuumSoft.Reporting.Components.InlineReportSlot型のreportSlotオブジェクトの場合)

コード:

PerpetuumSoft.Reporting.Export.Pdf.PdfExportFilter pdfExportFilter1 = new PerpetuumSoft.Reporting.Export.Pdf.PdfExportFilter();
pdfExportFilter1.Export(reportSlot.RenderDocument(), "report.pdf", false);
System.Diagnostics.Process.Start("report.pdf");
 

8

サブレポートについて

Q. レポートはidごとにグループ化されています。グループのidごとにフィルタをかけたサブレポートを各グループに表示したいのですが。
MSAccessでは、サブレポートのプロパティにLink Master/Childフィールドを指定できます。
Report Sharp Shooterではどうすればよいですか?
 

2010/10/08

A. これを行うには、パラメータを使わなければなりません。グループのidの値をサブレポートのパラメータとして渡します。サブレポートにパラメータを追加するには、パラメータのコレクションを使用してください。また、コレクションと同じ名前のパラメータをサブレポートに追加してください。
 

7

ページの最終行

Q. ページの最終行を認識する方法はありますか?
 

2010/10/08

A. DataBand オブジェクトのIsLastLine プロパティを使用して、ページに最後の文字列を表示するかどうかを定義できます。
 

6

各ページにフッターを表示する

Q. サブレポートに動的な長さのデータを生成し、先頭ページと最終ページだけでなく、各ページの終わりに1行書きたいのですができますか?
 

2010/10/08

A. サブレポートにはマスターページに表示されないページフッターがあります。それをマスターページに移動すれば、この場合、すべて正常に表示されます。
 

5 ラベルを水平方向に印刷する

Q. データバンドのColumnCountプロパティを使用してラベルを印刷しています。
現在、列方向にラベルが印刷されます。
水平に印刷するにはどうすればよいですか?

各ページにラベルを2列で印刷し、そのためにデータバンドのColumnCountプロパティを使用しています。
1ページに3行収まるとすると、各ページのラベルは3 * 2 = 6になります。

Label Label
Label Label
Label Label

しかし、1ページにラベルを2つしか印刷しない場合、ラベルは下記のように垂直に印刷されてしまいます。

Lablel1
Lablel2

次のように水平方向に印刷したい。

Lable1 Label2

また、印刷の開始箇所にStart Row とStart Columnを設定できますか?

 

2010/10/08

 

A. サンプルテンプレートを用意しましたので、こちらからダウンロードしてください。

MultiColumn.zip

このテンプレートでは文字列ごとにオブジェクトを水平に表示する方法を示しています。


QNo.57 に統合しました。そちらをご覧ください。(2012/02/08)
 

4

データバンドの位置付け

Q. レポートの0;5cmの位置にデータバンドを作成しました。しかし、レポートを実行すると、データバンドがページの先頭にジャンプし、データバンドが既存のオブジェクトの上に配置されてしまいます。デザイン時に設定した位置にデータバンドを配置するにはどのプロパティを使えばよいですか?
 

2010/10/08

A. データバンドは非可視オブジェクトで、データを反復し、レポート要素を表示するよう設計されています。レポートテンプレート内のデータバンドの位置は最終ドキュメントの表示位置には関係ありません。しかし、相対位置がセクションの表示順を定義するので、データバンドセクションの相対位置は重要です。データは最終レポートの空白部分から表示されていきます。この位置を移動するには、ページの指定した高さにHeaderやDetailを配置してください。データバンドの位置はセクションの位置を自動的に表示する「バンドのレイアウト」オプション(「表示」メニューまたはツールバーのボタン)が設定されていない場合のレポートのテンプレートにのみ重要です。
 

3

Report Sharp Shooter 4JのVS 2003での利用

Q. Report Sharp Shooter 4JはVS 2003をサポートしますか?
 

2010/10/08

A. Report Sharp Shooter 4JはVS2003をサポートしません。
.NET1.1をサポートしているReport Sharp Shooter 1.8Jをご利用ください。1.8Jの製品ページは次のリンクをご覧ください。
「Report Sharp Shooter 1.8J」は、販売を終了いたしました。

 Report Sharp Shooter 1.8J 製品ページ

 

2

用紙サイズの設定

Q. プロジェクトを1.8J から新しい4Jのプロジェクトに変換しました。用紙サイズを動的に変更する部分に問題があります。

- 外部ファイルに保存したテンプレートがあり、A4の標準の用紙サイズです。
-以下のコードでこのテンプレートをプロジェクトに読み込みます。
FileReportSlot slot = new FileReportSlot();
slot.FilePath = filename;
reportManager.Reports.Add(report);
slot.RenderDocument();

- 前は用紙サイズを次のコードで変更できました。
slot.Document.Pages[0].PaperKind = newPaperSize;

サイズ設定の後にslot.RenderDocument()を行ってもだめです。
 

2010/10/08

A. slot.RenderDocumentメソッドはドキュメントを生成し、結果となるドキュメントをslot.Documentプロパティに設定します。ドキュメントのテンプレートの用紙サイズを変更するには、slot.LoadReportメソッドやslot.SaveReportメソッドを使用してください。

コード:

Document template = slot.LoadReport();
template.Pages[0].CustomSize = newSize;
slot.SaveReport(template);
 

1

データバンド内での行の並べ替え

Q. バンドで行を並べ替えられますか?
たとえば、データバンド内に10社の行があって、Nameで会社名を並べ替えたい。

備考:データソースはtypeオブジェクトです。
 

2010/10/08

A. Report Sharp Shooterはデータを処理するためのものではありませんが、データをビジュアル表示するためのものです。アプリケーション内でデータをソートし、そのデータをレポートジェネレータに渡してください。

もちろん、この制限を回避できますが、あまり便利ではなく、更に問題を起しかねません。データのソートは次のように行われます。Document.GenerateScript
に次のコードを記述してください。

コード:

dataView1 = new System.Data.DataView();
dataView1.Table = (System.Data.DataTable)Engine.Objects["Table1"];
dataView1.Sort = "Column1";
Engine.Objects.Add("SortedData", dataView1);
dataBand1.DataSource = "SortedData";


dataView1
の変数をDocument.CommonScriptsで宣言してください。

コード:

System.Data.DataView dataView1;
 

 

Copyright (C) NEWTONE Corporation. All rights reserved.