ニュートン メニュー

株式会社ニュートン

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

体験版ダウンロード

製品案内

ライセンスパック

ライセンスについて

カスタマイズ受付

製品購入ガイド









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

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

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

サポート体制

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

会社概要

個人情報保護方針

お問い合わせ先

SSL GMOグローバルサインのサイトシール  

ニュートンホーム Q&A
SharpShooter Reports JP

帳票コンポーネント
SharpShooter Reports JP

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


【SharpShooter Reports JP Q&A一覧】

QNo.

分類

タイトル

Q. 質問

日付

A. 回答

107 全般

データがない場合でも1ページ内に罫線を表示

Q. データがない場合でも、1ページ内に罫線を表示できますか?


 

2019/02/21

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

サンプルプロジェクトは、次のリンクからダウンロードできます。
(Visual Studio C#用です。)

ADODataSource_Task2.zip


<簡単な説明>
databandを2つ利用します。
dataBand2の中にdetail2(空のセル)を配置します。
これは、データがない行に空のセルを表示するためのものです。
detail3のGenerateScriptプロパティに
次のスクリプトを設定します。
------------------------------------
detail2.Render();
dataBand2.InstanceCount = (int) (Engine.FreeHeight / detail2.RenderHeight);
------------------------------------
このスクリプトは、detail2をデータの有無に関わらずページの最後までレンダリングするために
dataBand2のInstanceCountプロパティを設定します。
また。このdetail3をdataBand2の前に配置しますが、
上記のスクリプトを実行するためだけなのでdetail3の高さはゼロに設定します。
 

106 全般

データ重複行の罫線及びデータを非表示にする

Q. データ重複行の罫線及びデータを非表示にできますか?


 

2019/02/21
2019/02/25

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

サンプルプロジェクトは、次のリンクからダウンロードできます。
(Visual Studio C#用です。)

ADODataSource_Task1.zip


<簡単な説明>
GroupBandを使用する必要があります。
グループのセルを最初の行に表示するために、header1の高さがゼロであることにご注意ください。
また、同一ブロック内の罫線省略のためのdetail1上のtextBox3、footer1上の高さゼロのtextBox4に注目してください。
 

105 全般

レポート のPDF出力を既定のダイアログを使わずコードで記述する場合で、PDFオプションダイアログの項目に相当するPerpetuumSoft.Reporting.Export.Pdf.PdfExportFilterのプロパティについて

Q. レポート のPDF出力を既定のダイアログを使わずコードで記述する場合で、下図のPDFオプションダイアログ中の青線で囲んだ項目に相当するPerpetuumSoft.Reporting.Export.Pdf.PdfExportFilterのプロパティは何ですか?


 

2017/03/07

A. ダイアログ中の「ドキュメントを開くにはパスワードが必要です」に相当するプロパティはありません。
これは、「ドキュメントを開くためのパスワード」に相当するUserPasswordプロパティに空文字列("")を設定することで「ドキュメントを開くにはパスワードが必要
です」のチェックがオフに、UserPasswordプロパティにパスワードとする文字列を設定することで「ドキュメントを開くにはパスワードが必要です」のチェックがオンに、それぞれ自動的に設定されるからです。

また、
同様に「自動で変更許可パスワードを作成」に相当するプロパティもありません。
「変更許可パスワード」に相当するChangePermissionsPasswordプロパティに空文字列("")を設定することで「自動で変更許可パスワードを作成」のチェックがオンに、ChangePermissionsPasswordプロパティにパスワードとする文字列を設定することで「自動で変更許可パスワードを作成」のチェックがオフに、それぞれ自動的に設定されます。
 

104 全般

レポートデザイナ上で複数のオブジェクト(例:TextBoxなど)を矩形状に一括選択する方法

Q. レポートデザイナで複数のオブジェクト(例:TextBoxなど)をマウスのドラッグで矩形状に一括選択する方法を教えてください。
 

2017/03/01

A. 対象とするデザイン上のオブジェクト(例:TextBoxなど)の配置箇所によって、次の通り操作が少し異なります。

[1] オブジェクトがバンド(DataBand、Detail、Header、Footerなど)上に配置されている場合
 [Ctrl]キーと[Shift] キーを押しながらマウスを左上から右下へ囲みドラッグして選択します。

[2]
オブジェクトがPage上に配置されている場合
 上記[1]の操作のほかに、
[Ctrl]キーだけを押しながらマウスを左上から右下へ囲みドラッグしても選択できます。
 

103 Web

製品版なのにSharpShooter Reports JP.Webの運用で体験版や未登録といったメッセージが表示される

Q. 製品版のライセンスを登録しているのにSharpShooter Reports JP.Webの運用で体験版や未登録といったメッセージが表示されます。解決方法を教えてください。
 

2016/11/29

A. SharpShooter Reports JP.Webを ASP.NET ビューアで利用するかJavascript+htmlビューアで利用するかによって、次の通り状況が異なります。

[1] ASP.NET ビューアを利用する場合

■Webアプリケーション・プロジェクトの場合

Licenses.licxファイルには次のような内容が記述されています。

PerpetuumSoft.Reporting.Components.ReportManager, PerpetuumSoft.Reporting, Culture=neutral, PublicKeyToken=8a6ae0a3e67829b5
PerpetuumSoft.Reporting.Web.SharpShooterWebViewer, PerpetuumSoft.Reporting.Web, Culture=neutral, PublicKeyToken=8a6ae0a3e67829b5

バージョンアップ時のライセンス問題を避けるには、ライセンスファイルの上記の "Culture=..." 以降は削除することをお勧めします。

Webアプリケーションプロジェクトの場合、Webアプリケーション(の.DLL)そのものにライセンスが組み込まれす。

たとえば、製品に付属のサンプルプロジェクト
C:\Program Files (x86)\Perpetuum Software\SharpShooter Reports\Samples\SharpShooter Reports.Web\WebDemo\CSharp
でしたら
「WebDemo.dll」にSharpShooter Reportsのライセンスが組み込まれます。
Webアプリケーション(の.DLL)に上述した2つのコンポーネントのライセンスが埋め込まれているか確認してください。
ライセンスが埋め込まれている場合、体験版や未登録のメッセージは表示されません。

.NET Framework用の逆コンパイラ「.NET Reflector」やVisual Studio 2015などでライセンスの記述の有無を確認することができます。
Visual Studio 2015では、ソリューションエクスプローラ上で該当アセンブリ(DLL)をダブルクリックするだけでその内容を表示できます。

<.NET Reflectorでの例> クリックで拡大


■Webサイト・プロジェクトの場合

Licenses.licxファイルのコンテキストメニューで「ランタイムライセンスの生成」を実行します。
そうしますとApp_licenses.dllが作成されます。

Webサイト・プロジェクトの場合、このApp_licenses.dllにライセンスが組み込まれます。
このApp_Licenses.dllに上述した2つのコンポーネントのライセンスが埋め込まれているか確認してください。
ライセンスが埋め込まれている場合、体験版や未登録のメッセージは表示されません。

なお、Visual Studio側の問題で上記の方法でApp_licenses.dllにライセンスが組み込まれない場合もあるようです。
その場合は、次の手順をお試しください。


1. Visual Studio を閉じる。
2. App_Licenses.dll ファイルを削除する。
3. Visual Studioを開く。
4. licenses.licx を右クリックし、「ランタイムライセンスの生成」を実行する。

これで、App_Licenses.dllにlicenses.licx が組み込まれます。

[2] Javascript+htmlビューアを利用する場合

Serviceクラスのコンテキストメニューを開き、[デザイナの表示] を選択します。
SharpShooter Reportsのコンポーネントが表示されるとすぐlicenses.licxファイルが表示されます。
もしくは、[プロパティ] フォルダでlicenses.licxファイルを手動で作成し、そこに次の文字列を記述します。

PerpetuumSoft.Reporting.Components.ReportManager, PerpetuumSoft.Reporting
PerpetuumSoft.Reporting.WebViewer.Server.ReportServiceBase, PerpetuumSoft.Reporting.WebViewer.Server

プロジェクトをリビルドします。
この場合、Webアプリケーション(の.DLL)そのものにライセンスが組み込まれす。

たとえば、製品に付属のサンプルプロジェクト
C:\Program Files (x86)\Perpetuum Software\SharpShooter Reports\Samples\SharpShooter Reports.Web\SharpShooterWebViewerMVC4
でしたら
「SharpShooterWebViewerMVC4.dll」にSharpShooter Reportsのライセンスが組み込まれます。
Webアプリケーション(の.DLL)に上述した2つのコンポーネントのライセンスが埋め込まれているか確認してください。
ライセンスが埋め込まれている場合、体験版や未登録のメッセージは表示されません。

.NET Framework用の逆コンパイラ「.NET Reflector」やVisual Studio 2015などでライセンスの記述の有無を確認することができます。
Visual Studio 2015では、ソリューションエクスプローラ上で該当アセンブリ(DLL)をダブルクリックするだけでその内容を表示できます。

.NET Reflectorでの例> クリックで拡大

 

102 全般

コンビニバーコードなどで利用するGS1-128(旧称:UCC/EAN-128)バーコードについて

Q. コンビニバーコード などのGS1-128(旧称:UCC/EAN-128)バーコードの利用方法を教えてください。
 

2016/07/13

A. はい、公共料金等代理収納GS1-128(コンビニバーコード)の場合の利用手順は次の通りです。

レポートデザイナにBarCode(バーコード)オブジェクトを配置し、CodeType プロパティに「CodeEAN128」か「CodeEAN128C」を設定し、Codeプロパティにバーコード出力するデータを設定します。その際、Codeプロパティに設定するデータにはアプリケーション識別子(AI)を含みます。公共料金等代理収納GS1-128(コンビニバーコード)の場合は先頭のアプリケーション識別子(AI)には"91"を設定します。

たとえば、バーコード表示の下の目視文字が次の場合、
--------------------------------------------------
(91)912345-1234567890123456789211
020331-0-123456-2
--------------------------------------------------
※()内はアプリケーション識別子(AI)

Codeプロパティには、括弧やハイフン(-)を含まない次のデータ文字列を設定します。
--------------------------------------------------
91912345123456789012345678921102033101234562
--------------------------------------------------

また、公共料金等代理収納GS1-128(コンビニバーコード)以外のGS1-128バーコードを利用する場合も利用手順は前述と同様です。

たとえば、アプリケーション識別子(AI)が複数含まれる、バーコード表示の下の目視文字が次の場合、
--------------------------------------------------
(01)04912345678904(17)080425(10)12345
--------------------------------------------------
※()内はアプリケーション識別子(AI)

Codeプロパティには、括弧を含まない次のデータ文字列を設定します。
--------------------------------------------------
0104912345678904170804251012345
--------------------------------------------------

なお、バーコードのGS1-128(旧称UCC/EAN-128)に関する詳細は「一般財団法人 流通システム開発センター」の次のページをご覧ください。
http://www.dsri.jp/standard/barcode/gs1-128.html

 

101 全般

旧バージョンからのアップグレードについて

Q. 旧バージョン「Report Sharp Shooter 3.7J」や「Report Sharp Shooter 4J」から「SharpShooter Reports JP」へのアップグレードの要点を教えてください。
 

2016/07/01

A. はい、次の通りです。

[レポートデザインを含む製品の互換性について
]
「SharpShooter Reports JP」は「Report Sharp Shooter 3.7J」や「Report Sharp Shooter 4J」に対して上位互換がありますのでそのまま使用できると思われますが、念の為、お客様の既存プロジェクトに対して体験版でお試しいただくことをお勧めいたします。

[64ビットOSへのインストールについて
]
「Report Sharp Shooter 3.7J」では64ビットOSへのインストールはできませんでしたが、「SharpShooter Reports JP」では64ビットOSへのインストールにも対応しています。

[ライセンスの移行について
]
(体験版を含め)インストール後のDocumentationフォルダに、「同一PCで前バージョン(4J)からの当バージョン(JP)へアップグレードする方法.pdf」がございますのでご一読ください。このファイルでは、同一PC上での新旧ライセンスの移行について説明しています。3.7Jからのアップグレードの方法も同じです。
 

100 全般

デザイン上での外字の利用について

Q. SharpShooter Reports JPで外字は利用できますか?
 

2016/06/24

A. はい、外字をご利用いただけます。

[PDF出力時
]
全角を表示できるフォントを指定していただければどのエディションでも、そのまま外字を利用できます。

[
SharpShooter Reports専用ビューア利用時]
Win、Web、WinRTの各エディションは、そのまま外字を利用できます。
Silverlight用ビューアおよび WPFビューアの場合は、外字が含まれているテキストボックス(TextBox)を配置しているデザインのDocumentオブジェクトのGenerateScriptプロパティに以下を設定することで外字が表示されます。

(例)外字が含まれているテキストボックスが「textBox1」の場合
textBox1.Font.FamilyName = "MS UI Gothic," + "file://c:/Windows/Fonts/EUDC.TTE" + "#EUDC";

なお、上記の「file://」以降は外字ファイルのパスです。適時、読み替えてご利用ください。

 

99 Web

Webアプリケーションの配置について

Q. SharpShooter Reports JP.Webを利用して作成したWebアプリケーションをWebサーバーに配置する場合、DLLの配置場所や日本語化の設定は、付属の「運用について.pdf」に記載されている設定でよいのでしょうか?
 

2014/04/18

A. はい、以下にご案内いたします。

[1] Webサーバーでは、通常、日本語化の設定のみを行う
SharpShooter Reports JP.Webを利用して作成したWebアプリケーションの場合、「運用について.pdf」内でWebサーバーへの配置時にお客様で考慮が必要な個所は「3.アプリケーションの配布」の「A.エンドユーザ環境でのプレビューの日本語化」のみとなります。

[2] Webサーバーに製品のライセンス登録は不要
「1.インストールファイル」と「2.製品のライセンス認証」は、開発用PCの環境に対する記述となります。SharpShooter Reports JP.Webのライセンスファイルを登録したPCの開発環境でビルドしたアセンブリに(体験版ではない製品版の)ライセンス情報が書き込まれ、そのアセンブリをWebサーバーに配置する形になるためWebサーバー自体にはライセンスの登録は必要ありません。

[3] 製品のDLLはVisual Studioの「発行」で自動配置
また、「3.アプリケーションの配布」の「B.配布するシステムファイル」は本来考慮する必要はありますが、通常はVisual StudioのWebアプリケーションの「発行」機能などを利用することで必要なDLLは自動的に発行先に配置されます。

しかし、それらを使用せずに手動で各ファイルをコピーされる場合の必要なDLLはこの、「3.アプリケーションの配布」の「B.配布するシステムファイル」の「2. SharpShooter Reports.Web」を参考にされてください。その際の配置先は通常、Webアプリケーションフォルダ内のbinフォルダです。
 

98 Silverlight

SilverlghtのVisual Basic用のテンプレートがない

Q. 「SharpShooter Reports.Silverlight 基本的な使い方.pdf」の「サンプルアプリケーションの作成」に従いVisual Basicで新しいSilverlightプロジェクトを作成する際に、プロジェクトへの新しい項目の追加ダイアログで「インストールされたテンプレート」に「Report Service Over HTTP」などが表示されません。なお、C#の場合は同様の操作で「Report Service Over HTTP」などのテンプレートが表示され選択できます。Visual Basicの場合の回避策はありますか?
 

2014/04/18

A. はい、申し訳ございませんが、現行のバージョン(6.4.0.40)では、SilverlightのVisual Basic用のテンプレートがインストールされません。つきましては、以下の手順にて作業を行ってください。

[手順1]
こちらよりZipファイルをダウンロードして、ファイルを解凍してください。

[手順2]
解凍した次の2つのフォルダ
Silverlight
Web
をご利用になるVisual Studio毎の所定のフォルダにコピーしてください。

(例)Visual Studio 2010の場合
C:\Users\<PC-Name>\Documents\Visual Studio 2010\Templates\ItemTemplates\Visual Basic\SharpShooter Reports

これで準備は完了です。

[手順3]
「SharpShooter Reports.Silverlight 基本的な使い方.pdf」に記載の手順で
(Silberlightの)テンプレートをご利用いただけます。
 

97 Web

JavaScript 実行時エラー

Q. 付属のサンプルプロジェクト「SharpShooterWebMVCSkin」、「SharpShooterWebViewer」、「SharpShooterWebViewerMVC」、「SharpShooterWebViewerSkin」の実行時に「JavaScript 実行時エラー:'JSON'は定義されていません。」といったエラーが表示されます。回避策はありますか?
 

2014/01/14

A. はい、それらのプロジェクトの実行時に使用するIE(Internet Explorer)で「ツール」メニューの「互換表示」がチェックされている場合にそのような現象になります。「互換表示」のチェックを外してください。
 

96 全般

プレビュー前に例外処理を行う

Q. SharpShooter Reports JP を使用したプログラム実行時に、たとえば実際のデータに(フィールド名が異なるなどの)不備があった場合、プレビュー画面を閉じてから例外が発生します。これをプレビュー画面表示前に例外処理を行うことはできますか?
 

2013/09/26

A. はい、できます。この例外処理を使用したサンプルプロジェクトを用意いたしました。

サンプルプロジェクトは、次のリンクからダウンロードできます。
(Visual Studio 2010/2012 C#用です。)

HandleRenderingExceptionReportSample_JP.zip

このサンプルでは、実行直後にデータを意図的にクリアして例外を発生させます。その例外を、renderSite_HandleExceptionで処理します。また、previewOkFlagによりプレビューの表示・非表示を設定します。想定した例外が発生した場合は、プレビューを表示せずにメッセージボックスを表示します。

以下にForm1.csのコードの一部を掲載しました。詳しくはサンプルプロジェクトをダウンロードしてご覧ください。

private Boolean previewOkFlag = true; //プレビュー表示フラグ
・・・・
EmptyRenderSite renderSite;

private void Form1_Load(object sender, System.EventArgs e)
{
  DataRow row = dataTable1.NewRow();
  row["Name"] = "Johnson Leslie";
  row["Phone"] = "613-442-7654";
  dataTable1.Rows.Add(row);
  row = dataTable1.NewRow();
  row["Name"] = "Fisher Pete";
  row["Phone"] = "401-609-7623";
  dataTable1.Rows.Add(row);
  row = dataTable1.NewRow();
  row["Name"] = "Brown Kelly";
  row["Phone"] = "803-438-2771";
  dataTable1.Rows.Add(row);

  //dataTable1のデータをクリアして、データが意図的に無い状態にします。
  //次の行をコメントアウトすると、全データが正常に表示されます。
  dataTable1.Clear();

  //イベントとイベントハンドらの関連づけ
  reportSlot.RenderCompleted += new EventHandler(reportSlot_RenderCompleted);

  renderSite = new EmptyRenderSite(reportSlot);

  //reportSlotの例外モード(デフォルトはWarning)をrenderSiteの例外モードに設定します。
  renderSite.ExceptionMode = reportSlot.ExceptionMode;

  renderSite.HandleException += renderSite_HandleException;
}

void renderSite_HandleException(object sender, ErrorEventArgs args)
{
  if (args.Exception.InnerException is PerpetuumSoft.Reporting.Data.DataNavigationException)
  {
    //データがない場合
    args.Handled = true; //エラーを無効にする。
    previewOkFlag = false; //プレビューを表示しないよう設定。
  }

i  f (args.Exception.InnerException.Message.Contains("Name"))
  {
    //特定の(データ)フィールドに関するエラー。
    //この例では、dataSet1のCustomersテーブルのNameフィールドに関するエラー。
    args.Handled = true; //エラーを無効にする。
    previewOkFlag = false; //プレビューを表示しないよう設定。
  }

  if (args.Exception.Message.Contains("textBox1"))
  {
    //特定の(デザイン上の)コントロールに関するエラー。
    //この例では、デザイン上のtextBox1に関するエラー。
    args.Handled = true; //エラーを無効にする。
    previewOkFlag = false; //プレビューを表示しないよう設定。
  }
}

private void button2_Click(object sender, System.EventArgs e)
{
  reportSlot.LoadReport();
  reportSlot.RenderDocument(renderSite);
}

private void button1_Click(object sender, System.EventArgs e)
{
  reportSlot.DesignTemplate();
}

private void reportSlot_RenderCompleted(object sender, EventArgs e)
{
  if (previewOkFlag == true)
  {

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

  //プレビューを表示せずにメッセージを表示する。
  {
    MessageBox.Show("レポートに不備があります。表示できません。");
  }

}
 

95 全般

異なる複数のデザインをプレビューに連続して表示

Q. 異なる複数のデザインをプレビューに連続して表示できますか?
たとえば、A3横デザイン → A4縦デザイン → A4横デザインといった場合です。
 

2013/09/05

A. はい、それを実現するサンプルプロジェクトを用意いたしました。

<実行イメージ>


サンプルプロジェクトは、次のリンクからダウンロードできます。
(Visual Studio 2012 C#用です。)

subreport_size_JP.zip

<サンプルプロジェクトの簡単な説明>
このサンプルプロジェクトでは、サブレポートを使用しています。

Form1.cs上のReportManager(reportManager1)コントロールのReportManagerエディタの「レポート」タブに4つのReportSlotがあり、FilePathは、それぞれMaster2Subreports.rst、Master2SubreportsCustomers.rst、Master2SubreportsEmployees.rst、Master2SubreportsProducts.rstとなっています。これらのうち、Master2Subreports.rstはマスターレポートでそれ以外はサブレポートです。

また、reportSlotSub1からreportSlotSub3までのReportNameはそれぞれSub1、Sub2、Sub3となっていることにご注目ください。

マスターレポートにあたるreportSlotMasterのデザインを起動してご覧ください。
そうしますと、(デザイナの左下に)page1〜4があります。
page1はマスターレポート用でVisibleプロパティがFalseに設定されていますが、このpage1は以降のサブレポートを表示するために必要です。
サブレポート毎にページサイズを指定するには、マスターレポートのデザインをサブレポート毎にpageで区切る必要があります。
page2〜4上のデザインにはそれぞれSubReportオブジェクト(subReport1〜3)のTemplateNameプロパティがそれぞれ前述のSub1、Sub2、Sub3となっています。これにより、マスターレポートから呼び出されるサブレポートを指定しています。

この例では、マスターレポートのpage2〜4のPaperKind プロパティと Orientation プロパティにそれぞれのサブレポートの用紙サイズと用紙の向きを設定しています。

<関連の製品付属のサンプルプロジェクトのご案内>
また、あわせて製品付属のサンプルプロジェクト「SharpShooterReportsSamplesCenter」の次の箇所もご覧ください。
実行時のメニューツリーでのレポート->サブレポート->サブレポートの使用例。
デザイン時、ソリューションエクスプローラでの SharpShooterReportSamplesCenter->Reports->SubReportsのTwoSubReportsReportControl.cs

<サブレポート機能に関するドキュメントのご案内>
なお、サブレポートの詳細につきましては、製品のユーザガイド(SharpShooter Collection User Guide.chm)のSharpShooter Reports->ユーザーガイド->サブレポートの使用 をご覧ください。
 

94 全般

TextBoxのフォントの自動リサイズ

Q. デザイン上のTextBoxオブジェクトで、実行時に動的にセットされる文字列の文字数に応じて自動的にフォントサイズを縮小し、デザイン時に指定したTextBoxの枠サイズ内に全文字を表示するようにできますか?
 

2013/07/12

A. はい、それを実現するサンプルプロジェクトを用意いたしました。
(ただし、TextBoxのデザイン時のサイズによっては縮小できる文字列の文字数とフォントサイズに限界があります。)

<実行イメージ>


サンプルプロジェクトは、次のリンクからダウンロードできます。

TextBoxFontResize.zip

<サンプルプロジェクトの簡単な説明>
新しい行が作成される前にフォントサイズをデフォルト値に戻し、FontDescriptor オブジェクトを作成して文字の縮小に対応しています。TextBoxの適切なフォントサイズを探すループの前後でCanGrowプロパティを利用しています。
このサンプルプロジェクトは、レポートデザイン上の次の箇所に注目してください。

Documentオブジェクト doc1のCommonScriptプロパティに次を記述

double originalFontSize;

Documentオブジェクト doc1のGenarateScriptプロパティに次を記述

originalFontSize = Engine.IsDoublePass? originalFontSize : textBox1.Font.Size;

Detailオブジェクトのdetail1のGenerateScript プロパティに次を記述

double fontHeight = originalFontSize;
textBox1.Font = new FontDescriptor(textBox1.Font);
textBox1.Font.Size = originalFontSize;
textBox1.CanGrow = true;
int count = 0;
textBox1.Prepare();
while(textBox1.RenderHeight > textBox1.Size.Height && count < 10)
{
  fontHeight = textBox1.Font.Size;
  textBox1.Font.Size = textBox1.Font.Size - 1;
  textBox1.Prepare();
  count++;
}
textBox1.CanGrow = false;
 

93 Web

IE10で、「SharpShooterWebMVCSkin」 サンプルを 実行すると表示後、エラーが表示される

Q. インターネットエクスプローラ(IE)のバージョンを10に変えたら、製品付属の 「SharpShooterWebMVCSkin」 サンプルを 実行するとレポート自体は表示されるが、次のエラーが表示されます。

「コンピュータ 'コンピュータ名' 上のプロセス [プロセスID] iexplore.exe に
スクリプトデバッガーをアタッチできませんでした。デバッガーは既にアタッチされています。」

IEのバージョンが9の時はエラーは表示されませんでした。回避策はありますか?
 

2013/06/21

A. はい、そのような現象が確認されています。
これを回避するには、以下を行ってください。
1. IE を閉じる
2. コマンドプロンプトか「ファイル名を指定して実行...」で以下を実行する。
<32ビットPCの場合>
regsvr32.exe "%ProgramFiles%\Common Files\Microsoft Shared\VS7Debug\msdbg2.dll"
<64ビットPCの場合>
regsvr32.exe "%ProgramFiles(x86)%\Common Files\Microsoft Shared\VS7Debug\msdbg2.dll"
 

92 全般

ビューアを使用しないで、フォーム上のボタンに連動したコードで直接印刷したい

Q. ビューアを使用しないで、フォーム上のボタンに連動したコードで直接印刷する方法を教えてください
 

2013/05/22

A. はい、サンプルプロジェクトを用意いたしました。
次のリンクからダウンロードできます。

PrintNoReportViewerShown.zip


このZipファイルにはフォーム上のボタンに連動したコードで直接印刷する次の5つのサンプルプロジェクトが含まれています。
・Win用
・Web用(htm)
・Web用(ASPX)
・Silverlight用
・WPF用
 

91 全般

Crystal Reports用のインポートツールでエラーが表示される

Q. Crystal Reports用のデザインファイルのインポートツール(CrystalReportsImportWizard.exe)を利用してCrystal Reportsのバージョン8.5のデザインファイルをインポートすると次のようなエラーが発生してインポートできません。回避策はありますか?

「ファイルまたはアセンブリ'CrystalDecisions, Shared, Version=10.5.・・・・、またはその依存関係の1つが読み込めませんでした。指定されたファイルが見つかりません。」
 

2013/04/17

A. SharpShooter Reports のCrystal Reportsからのデザインファイルのインポートツールを動作させるためには、Visual Studio 付属のCrystal Reports関連のDLLとその登録が必要です。しかし、Visual Studio 2010からはCrystal Reports(サブセット版)のバンドルがなくなりました。従いまして、例えばVisual Studio 2010のみがインストールしてある開発環境で、当該ツール でCrystal Reportsのバージョン8.5のデザインファイル(Crystal Reports for VS .NET 2008)をインポートする際にご指摘のようなエラーがでる場合があります。

これを回避するには、Crystal Reportsの現在の販売元であるSAP社のWebサイトでランタイムモジュールをインストールして登録してくれるインストーラ(.msi)が無償でダウンロードできるます。URLは次の通りです。

https://websmp130.sap-ag.de/sap(bD1qYSZjPTAwMQ==)/bc/bsp/spn/bobj_download/main.htm

このページの、Software Product で「Crystal Reports」を、製品バージョン で「Crystal Reports for VS .NET 2008」をそれぞれ選択して、「Search」ボタンを押します。そうしますと、該当した一覧が表示されます。
その中で、32ビット環境であれば「CR Basic for VS 2008 - Redistributable file for x86」、64ビット環境であれば「CR Basic for VS 2008 - Redistributable file for x64」をそれぞれ選択してダウンロードしてください。
その後は、ダウンロードしたZIPファイルを解凍してセットアップ(.MSI)を実行してください。

 

90 Win

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. リビルドする。
 

89 Win

ドキュメント生成中ダイアログを非表示にしたい

Q. 実行時にドキュメント生成中ダイアログを非表示にする方法を教えてください。
 

2013/01/21

A. はい、ドキュメントを生成するメソッドで以下の(1)のようにRenderDocumentメソッドを利用することで非表示にできます。 また、(2)のようにメソッドによってコード実行順も異なります。

(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ページのドキュメントの生成が終了してからメッセージボックスが表示されます。
 

88 Web

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

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

2012/12/17

A. Excel(.xls)へのエクスポートではなく、Excel2007形式(.xlsx)へのエクスポート を利用してください。

たとえば、サンプルプロジェクト「WebPublish」(Webビューアを使用しないサンプル)では、次の手順となります。
プロジェクトの参照に、PerpetuumSoft.Reporting.Export.OpenXML を追加します。
MainPage.aspxのデザインでDropDownList1のコレクションに「Excel(.xlsx)」を追加し 、Valueプロパティに"XLSX"、Textプロパティに"Excel(.xlsx))"などと設定します。
次に、ReportPage.aspx.csに以下の青字部分を記述します。

・・・・・
Document doc = fileReportSlot2.RenderDocument();
Stream m = Response.OutputStream;

switch(format)
{
case "PDF":
  PdfExportFilter pdf = new PdfExportFilter();
  pdf.Export(doc, m);
  Page.Response.ContentType = "application/pdf";
  break;

case "HTML":
  Page.Response.ContentEncoding = System.Text.Encoding.UTF8;
  HtmlExportFilter htm = new HtmlExportFilter();
  htm.Export(doc, m);
  break;

case "Excel":
  ExcelExportFilter xls = new ExcelExportFilter();
  xls.Export(doc, m);
  Page.Response.AddHeader("Content-Disposition", "attachment; filename=ReportPage.xls");
  Page.Response.ContentType = "application/excel";
  break;

case "XLSX":
  var xlsx = new PerpetuumSoft.Reporting.Export.OpenXML.ExcelExportFilter();
  using (var memoryStream = new MemoryStream())
  {
  xlsx.Export(doc, memoryStream);
  var data = memoryStream.GetBuffer();
  m.Write(data, 0, (int)memoryStream.Length);
  Page.Response.AddHeader("Content-Disposition", "attachment;filename=ReportPage.xlsx");
  Page.Response.ContentType = "application/excel";
}
break;

・・・・・
 

87 全般

前行と同一値は出力しない方法

Q.明細出力時に前行と同一値は出力しない方法はありますか?
 

2012/12/06

A. はい、先に、プレビュー例を見てください。

この例の場合、レポートデザイナ上で以下の通り設定します。

まず、DocumentオブジェクトのCommonScriptプロパティに次の通り記述して、グローバル変数を定義します。

Dim stringCompany as string = ""

次に、会社名に相当するTextBoxオブジェクト(textBox1)のGenerateScriptプロパティを選択してエディタに次のコードを記述して、前行と同じ会社名なら「〃」を表示するようにします。

Dim str1 as String = textBox1.Value
If (str1 = stringCompany) then
  textBox1.Value = "〃"
Else
  stringCompany = str1
End If
 

86 Silverlight

前バージョンReport Sharp Shooter for Silverlight 4Jのプロジェクトを利用すると参照エラーになる

Q.前バージョンのReport Sharp Shooter for Silverlight 4JのプロジェクトをSharpShooter Reports JP.Silverlightでそのまま使用すると、PerpetuumSoft.Reporting.Silverlight.Export(.DLL)の参照エラーになります。解決方法を教えてください。
 

2012/11/30

A. はい、SharpShooter Reports JP.Silverlightでは、PerpetuumSoft.Reporting.Silverlight.Export(.DLL)の名前を
PerpetuumSoft.Reporting.Xaml.Export(.DLL)に変更しました。
Report Sharp Shooter for Silverlight 4Jのプロジェクトをご利用で前者の参照を指定している場合はそれを参照から削除し、後者の参照を追加してください。
 

85 Silverlight

ビューアからの印刷後ChildWindowを開くとユーザコントロールが無効になる

Q.SharpShooter Reports JP.Silverlightで、ビューアからの印刷後ChildWindowを開くとユーザコントロールが無効になります。解決方法を教えてください。
 

2012/11/30

A. はい、これは Silverlight 5 と ChildWindow 関連の周知の問題です。
これを修正するには、プロジェクトのコードを少し修正する必要があります。
以下の例を参考にしていただきまして、コード中の「追加」部分を追加してください。

<MainPage.xaml.cs>

private void OpenWindow(object sender, System.Windows.RoutedEventArgs e)
{
  var window = new ChildWindow();

  //追加****************
  window.Closed += window_Closed;
  //********************
  window.Title = "Sample";
  window.Width = 500;
  window.Height = 500;

  window.Show();
}

//追加****************
void window_Closed(object sender, EventArgs e)
{
  Application.Current.RootVisual.SetValue(Control.IsEnabledProperty, true);
}
//********************

・・・・・・
 

84 Silverlight

ローカルのテスト環境でサーバー側のServiceURLを書いた場合、レポートの閲覧権限がない場合の表示制限

Q.任意のレポートを特定のユーザに対して表示させたいのですがどのようにすればよいでしょうか。現在は、WCF RIA Servicesのフォーム認証を用いて認証をさせていますが、レポート独自の通信に対してはカスタム認証属性の効果がなく、素通りしてしまいます。できれば、WCF RIA Servicesのフォーム認証と連携させて表示制限をかけたいと思っています。
また、ローカルサーバーでのテストで、ReportViewerのServiceUrlにサーバー用のURLを書いた場合、サーバーに対象のsvcがあればレポートを取得してしまいます。この現象を回避する方法を教えてください。
 

2012/11/30

A. はい、次の行を web.config に追加して、未認証ユーザの svc サービスへのアクセスを拒否できます。

<location path="ReportService1.svc">
  <system.web>
    <authorization>
      <deny users="?"/>
    </authorization>
  </system.web>
</location>

この場合の ReportService1.svc は svc サービスのパスです。これで、フォーム認証に対して動作するようになります。
 

83 Silverlight

プロジェクトを実行すると「System.Xml.Linq」に関するエラーが報告される

Q. 本製品を利用したVisual Studio のプロジェクトを実行すると次のようなエラーが報告されます。

Silverlight アプリケーションのハンドルされないエラー
コード: 4004
カテゴリ ManagedRuntimeError
メッセージ: System.IO.FileNotFoundException: ファイルまたはアセンブリ 'System.Xml.Linq, Version=・・・・・・'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。
ファイル名 'System.Xml.Linq, Version=・・・・・・' です。

解決方法はありますか?

 

2012/11/30

A. はい、Silverlight5の場合、System.Xml.Linq(.DLL) の参照がないとそのような現象になります。

クライアントプロジェクト側の参照設定にSystem.Xml.Linq(.DLL) を追加してください。
 

82 Silverlight

プロジェクトを実行すると「テキスト'printing:PrintingDialog' から 'System.Type' を作成できませんでした。」エラーが 表示される

Q. 本製品を利用したVisual Studio のプロジェクトを実行すると次のエラーが表示されます。

テキスト'printing:PrintingDialog' から 'System.Type' を作成できませんでした。

解決方法はありますか?

 

2012/11/30

A. はい、System.Windows.Controls(.DLL) の参照がないとそのような現象になります。

クライアントプロジェクト側の参照設定にSystem.Windows.Controls(.DLL) を追加してください。
 

81 Silverlight

プロジェクトを実行すると「Rendering」表示後にエラーが報告される

Q. 本製品を利用したVisual Studio のプロジェクトを実行すると「Rendering」表示後に、空白ページが表示され次のような エラーメッセージが報告されます。

メッセージ: Silverlight アプリケーションのハンドルされないエラー
コード: 4004
カテゴリ ManagedRuntimeError
メッセージ: System.Reflection.TargetInvocationException: 操作中に例外が発生し、結果が無効になりました。例外の詳細については InnerException を確認してください。 --->
System.ServiceModel.CommunicationException: URI 'http://localhost:5555/ReportService.svc' への要求試行時にエラーが発生しました。これは、正しいクロスドメイン ポリシーを適用せずにクロスドメインでサービスにアクセスしようとしたことか、SOAP サービスには適していないポリシーが原因で発生した可能性があります。サービスの所有者に問い合わせて、クロスドメイン ポリシー ファイルを公開し、SOAP 関連の HTTP ヘッダーが送信されるようにしてもらう必要がある可能性もあります。このエラーは、Web サービス プロキシでInternalsVisibleToAttribute 属性を使わずに内部型を使用した場合にも発生することがあります。詳細については、内部例外を参照してください。
・・・・・・


解決方法はありますか?

 

2012/11/30

A. はい、以下の場合にそのような現象になります。

たとえば、ソリューションエクスプローラのSilverliight側のスタートページ(MainPage.xamlなど)で

<Grid x:Name="LayoutRoot" Background="White">
<rss:ReportViewer x:Name="ReportViewer1" ServiceUrl="http://localhost:5555/ReportService.svc" ReportName="CustomersReport"/>
</Grid>

のように、ポート番号が5555になっているのに、Webホスト側のプロジェクト(SampleApplication.Webなど)のコンテキストメニューのプロパティ画面のWebタブの「Visual Studio 開発サーバーを使用する」の「ポートの自動割り当て」にチェックが入っていることが原因です。
ここで、「ポートを指定する」をチェックをして右のテキストボックスに5555を入力してください。
 

80 Silverlight

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

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/11/30

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

79 Silverlight

Silverlight4の環境でVisual Studio が強制終了

Q. Visual Studio 2010で、Silverlight4の環境でSilverlightアプリケーションの開発をしているとVisual Studioが強制終了することがあります。対策はありますか?
なお、その際は以下のようなエラーログを記録します。

******************************************************
ソース : .NET Runtime
イベント ID: 1026

アプリケーション:devenv.exe
フレームワークのバージョン: v4.0.30319
説明: ハンドルされない例外のため、プロセスが中止されました。
例外情報: System.ObjectDisposedException
スタック:
場所 System.Windows.Threading.Dispatcher.FastInvoke(
System.Windows.Threading.DispatcherPriority,
System.Delegate, System.Object[])
場所 System.Net.Browser.AsyncHelper.CheckUseLowLatencyNetworking()
場所 System.Net.Browser.AsyncHelper.BeginOnUI(
System.Threading.SendOrPostCallback, System.Object)
場所 System.Net.Browser.BrowserHttpWebRequest.Abort()
場所 System.ServiceModel.Channels.HttpOutput
+WebRequestHttpOutput.Abort(
System.ServiceModel.Channels.HttpAbortReason)
場所 System.ServiceModel.Channels.HttpChannelFactory
+HttpRequestChannel+
HttpChannelAsyncRequest.AbortSend()
場所 System.ServiceModel.Channels.HttpChannelFactory
+HttpRequestChannel+
HttpChannelAsyncRequest.OnSendTimeout(System.Object)
場所 System.Threading._TimerCallback.TimerCallback_Context(
System.Object)
場所 System.Threading.ExecutionContext.Run(
System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
場所 System.Threading._TimerCallback.PerformTimerCallback(
System.Object)

******************************************************

 

2012/11/30

A. はい、これは Silverlight のフォーラムで既知のバグです。
フォーラムのリンクはこちらです:
http://stackoverflow.com/questions/5457452/visual-studio-with-mvvm-light-toolkit-crash
(英語のページです)

これは Visual Studio の問題で、弊社製品(SharpShooter Reports JP.Silverlight)とは関係がありません。
この問題を解決するには、次の手順を試してみてください。
以下は、前述のリンクページの下方の「Answers」に記載されているものの日本語訳です。

1. ツール -> オプションに行く。
2. テキストエディター -> XAML -> その他
3. 「常にフル XAML ビューでドキュメントを開く」オプションにチェックを付ける。
4. xaml 内のエラーを解決する。
5. XAML をデザインビューで表示するには、このオプションのチェックを外してください。

78 Silverlight

TextBoxの横方向のはみ出し

Q. TextBoxの文字列がTextBoxに入りきらない場合で、フォントを MS P ゴシックなどの非等幅(プロポーショナル)フォントにした場合に、TextBoxの枠を横方向に超えて文字列が表示される。 この件の解決策はありますか?
 

2012/11/30

A. はい、Silverlightのクライアント側のプロジェクトのプロパティで、使用するSilverlightのバージョンを Silverlight4 から Silverlight5 にすることで下図の通り解決します。


77 Silverlight

Microsoft Visual Studio 2010 を使用して Web アプリケーションを作成する際のエラー

Q. VisualStudio2010 や WebDeveloper2010 の Express 版を使用して、Web サイトや、製品・体験版に付属のドキュメント内にある「Microsoft Visual Studio 2010 で SharpShooter Reports JP.Silverlight を使って簡単な Web アプリケーションを作成する方法」でプロジェクト作成中に、以下のようなエラーが出て先に進めません。どうすればよいですか?


 

2012/11/30

A. Visual Studio の Express 版 はIDE の拡張をサポートしていないため、当製品は、Express 版での開発には対応しておりません。Visual Studio 2010 製品版をご利用いただきますようお願いいたします。

76 Silverlight

Silverlight 5への対応

Q. SharpShooter Reports JP.Silverlightは、Silverlight 5(の開発環境)に対応していますか?
 

2012/11/30

A. はい、2012年1月13日にマイクロソフトより正式にリリースされたSilverlight 5の日本語版開発環境に対応していることを確認いたしました。

既存の
Silverlight 4プロジェクトをSilverlight 5プロジェクトにするには、前述のSilverlight 5の日本語版開発環境をインストール後、Visual Studio 2010 で当該プロジェクトのプロパティページを開き、「Silverlight」タブの「Silverlight ビルド オプション」の「対象のSilverlightバージョン」をSilverlight 5に変更します。

また、
Silverlight 5での開発時には、クライアント側(ReportViewerコンポーネントを使用する)プロジェクトには、以下のDLL参照を忘れずに加えてください。

System.Xml.Linq.dl
l

 

75 Silverlight

ビューア(ReportViewer)の表内の同じ項目の枠線をまとめる

Q. ビューア(ReportViewer)の表内の同じ項目の枠線をまとめる方法を教えてください。
たとえば、次の「B」のようなイメージです。


 

2012/11/30

A. はい、次のリンクからサンプルプロジェクトをダウンロードできます。

http://www.newtone.co.jp/support/doc/MK4-/SilverlightDemo_SL4(VS2010)_GyoMatome.zip

このサンプルプロジェクトでは、デザイン上のDocumentオブジェクトdocument1のCommonScriptプロパティとGenerateScriptプロパティ、GroupBandオブジェクトgroupBand1のGenerateScriptプロパティにご注目ください。
 

74 Silverlight

ビューア(ReportViewer)の表示倍率の指定

Q. ビューア(ReportViewer)の表示倍率を指定できますか?
 

2012/11/30

A. はい、指定できます。
ReportViewerコントロールのSetZoomメソッドを利用してください。
引数は(ズームモード、倍率)です。
SetZoomメソッドはクラスリファレンスにも記載されています。

以下に例を示します。
例では、reportViewer.DocumentLoaded イベントハンドラで
実行起動時にビューアの倍率を70%にしています。

namespace SilverlightDemo
{
  public partial class MainPage : UserControl
  {
    public MainPage()
    {
      InitializeComponent();
      this.Loaded += new RoutedEventHandler(MainPage_Loaded);
    }

    void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
      //-------日本語化---------------------------------
      System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("ja-JP");
      //------------------------------------------------

    reportViewer.RenderDocument();
    }

    private void reportViewer_DocumentLoaded(object sender,
    PerpetuumSoft.Reporting.Silverlight.Client.DocumentLoadedEventArgs e)
    {
      //ズームの指定
      reportViewer.SetZoom(PerpetuumSoft.Reporting.Silverlight.Client.ZoomMode.Scale, 0.7);
    }

  }
}

 

73 Silverlight

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

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

2012/11/30

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

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

このように、JISのB列(B5、B4、B3など)を利用するプリンタで印刷する場合は、SharpShooter Reports JP.Silverlight のデザイン上で、用紙サイズを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
 

72 Silverlight

実行時のビューア(ReportViewer)上の各ボタンの表示・非表示を設定する

Q. 実行時のReportViewerでの出力機能(PDF、Excelなど)を任意の機能のみに制限することはできますか?
 

2012/11/30

A. はい、方法は2つあります。

[1] .xamlのデザイン上のReportViewerコンポーネントのプロパティを設定する

xamlのデザイン上のReportViewerコンポーネントのViewOptionsプロパティを展開すると表示・非表示を切り替えられる項目が一覧され、それぞれに表示・非表示を設定できます。

[2] Visual Studioのコードで設定する

たとえば、サンプルプロジェクトのMainPage.xaml.csの場合は、次のようにコードで記述します。(青字部分

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
//---------日本語化時、必要---------------
using System.Globalization;
//----------------------------------------

//---------ツールボタン用----------------
using PerpetuumSoft.Reporting.Silverlight.Client;
//--------------------------------------

namespace SilverlightDemo
{
  public partial class MainPage : UserControl
  {
    public MainPage()
    {
      InitializeComponent();
      this.Loaded += new RoutedEventHandler(MainPage_Loaded);
    }

    void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
    //-------日本語化---------------------------------
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("ja-JP");
    //------------------------------------------------

    //-------ツールボタン用----------------------------
    reportViewer.ViewOptions = SetDefaultViewOptions();
   
//------------------------------------------------

    reportViewer.RenderDocument();
    }

    private ViewOptions SetDefaultViewOptions()
    {
      ViewOptions opt = new ViewOptions();

      opt.ExcelExportBrowsing = true; //show excel export(.xls)
      opt.XlsxExportBrowsing = true; //show excel export(.xlsx)
      opt.HistoryNavigatorBrowsing = false;
      opt.HtmlExportBrowsing = false;
      opt.PageModelNavigatorBrowsing = true;
      opt.PageNavigatorBrowsing = false;
      opt.PDFExportBrowsing = true; //show pdf export
      opt.PrintElementBrowsing = true; //show printing
      opt.RTFExportBrowsing = false;
      opt.SearchElementsBrowsing = false;
      opt.XPSExportBrowsing = false;
      opt.ZoomElementsBrowsing = true; //show zoom control

      return opt;
    }


  }
}
 

71 Silverlight

Visual Studio 2010のツールボックスに「SharpShooter Reports JP.Silverlight」のタブがなく関連するコンポーネントが表示されない

Q. Visual studio 2010のツールボックスに「SharpShooter Reports JP.Silverlight」のタブがなく関連するコンポーネントが表示されません。解決方法を教えてください。
 

2012/11/30

A. はい、次の手順でご確認ください。

[1] 作成するプロジェクトの「プロジェクト」-「プロパティ」を選択します。
[2] 「コンパイル」タブの「詳細コンパイルオプションボタン」を押します。
[3] 「対象のフレームワーク」で「.NET Framework 4 Client Profile」以外を選択してください。

また、これらのことは次のドキュメントにも記載してございます。
(インストール先がデフォルトの場合)
C:\Program Files\Perpetuum Software\Net ModelKit Suite\Documentation
にある
「VisualStudio2010の開発環境への組み込み.txt」。
 

70 Silverlight

デザイン上のTextBoxのスクリプトをVisual Studio側のコードで記述する方法

Q. デザイン上のTextBoxのバインドタブのプロパティにスクリプトを設定するのと同じ動作をVisual Studio側のコードで記述する方法を教えてください。
 

2012/11/30

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

たとえば、
デザイン上のTextBoxオブジェクトtextBox1の

バインドタブのVisibleプロパティに
GetData("ds.Column1").ToString().Length == 0 ? false : true
というスクリプト(コード)を、
バインドタブのValueプロパティに
GetData("ds.Column1")
というスクリプト(コード)を設定し、

デザイン上のTextBoxオブジェクトtextBox2の

バインドタブのVisibleプロパティに
GetData("ds.Column1").ToString().Length == 0 ? false : true
というスクリプト(コード)を、
バインドタブのValueプロパティに
GetData("ds.Column2")
というスクリプト(コード)を設定する場合は、

デザイン上でその設定をする代わりに以下の通り、Visual Studio側でコードを記述することで同じ動作を指定することができます。

<ReportService1.svc.cs>において

public ReportService1()
{
  InitializeComponent();
  - - - -
  WithoutEmptyTextBox();
}


private void WithoutEmptyTextBox()
{
  PerpetuumSoft.Reporting.DOM.Document document = inlineReportSlot1.LoadReport();
  PerpetuumSoft.Reporting.DOM.TextBox textBox1 = null;
  PerpetuumSoft.Reporting.DOM.TextBox textBox2 = null;
  foreach (PerpetuumSoft.Reporting.DOM.Page page in document.Pages)
  {
    textBox1 = FindTextBoxByName("textBox1", page) as PerpetuumSoft.Reporting.DOM.TextBox;
    textBox2 = FindTextBoxByName("textBox2", page) as PerpetuumSoft.Reporting.DOM.TextBox;
  }
  if (textBox1 != null && textBox2 != null)
  {
    textBox1.GenerateScript = "textBox1.Visible = GetData(\"ds.Column1\").ToString().Length == 0 ? false : true; textBox1.Value = GetData(\"ds.Column1\");";
    textBox2.GenerateScript = "textBox2.Visible = GetData(\"ds.Column1\").ToString().Length == 0 ? false : true; textBox2.Value = GetData(\"ds.Column2\");";
  }

  MemoryStream mstream = new MemoryStream();
  PerpetuumSoft.Framework.Serialization.XSerializationManager.Write(document, mstream);
  mstream.Position = 0;
  using (StreamReader sr = new StreamReader(mstream))
  {
    inlineReportSlot1.DocumentStream = sr.ReadToEnd();
  }
}


private PerpetuumSoft.Reporting.DOM.ReportControl FindTextBoxByName(string name, PerpetuumSoft.Reporting.DOM.IContainerControl container)
{
  PerpetuumSoft.Reporting.DOM.ReportControl result;
  foreach (PerpetuumSoft.Reporting.DOM.ReportControl control in container.Controls)
  {
    if (control.Name == name)
    {
      return control;
    }
    if (control is PerpetuumSoft.Reporting.DOM.IContainerControl)
    {
      result = FindTextBoxByName(name, control as PerpetuumSoft.Reporting.DOM.IContainerControl);
      if (result != null)
      {
        return result;
      }
    }
  }
return null;
}
 

69 Silverlight

PDFエクスポートダイアログなどの日本語表示の設定

Q. PDFエクスポートダイアログの項目名やSilverlightビューアのメニューのツールチップなどが日本語になりません。設定方法を教えてください。
 

2012/11/30

A. はい、設定方法は次の通りです。

[1] 日本語ローカライズファイルの配置

次のSilverlight用の日本語ファイル「ja-JP.xml
(インストール先がデフォルトの場合)
C:\Program Files\Perpetuum Software\SharpShooter Reports\Localization\Silverlight\ja-JP.xml を
SilverlightアプリケーションのWeb側プロジェクトフォルダのClientBinフォルダ内のRSS_Resフォルダにコピーします。



[2] コードの追加(前バージョン4Jでは必要でしたが、
SharpShooter Reports JP.Silverlightでは以下を記述する必要はありません。

Silverlightクライアント側のプロジェクトのメインページのソースファイル、
たとえば、サンプルプロジェクトの
(インストール先がデフォルトの場合)
C:\Program Files\Perpetuum Software\Net ModelKit Suite\Samples\Report
Sharp-Shooter\CSharp\SilverlightDemo_SL4(VS2010)\SilverlightDemo\MainPage.xaml.cs
のようなソースコードに次のコードを追加します。

1) 名前空間の使用宣言で、次のコードを1行記述します。

//---------日本語化時、必要---------------
using System.Globalization;
//----------------------------------------


2) 最初に(メインページが)ロードされるタイミングなどで以下のコメント行の間のコードを1行記述します。

void MainPage_Loaded(object sender, RoutedEventArgs e)
{

//-------日本語化---------------------------------
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("ja-JP");
//------------------------------------------------


reportViewer.RenderDocument();
}
 

68 Silverlight

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

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

2012/11/30

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

67 Silverlight

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

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

2012/11/30

A. Excel(.xls)へのエクスポートではなく、Excel(.xlsx)へのエクスポート を利用してください。本ページのQNo.72をご覧ください。
 

66 Silverlight

新しい日本語ローカライズファイルが反映されない

Q. 新しい日本語ローカライズファイル(ja-JP.xml)を含んだSilverlightサイトを、Webサーバーに発行しても、アクセスするクライアントによってはPDFのエクスポートダイアログなどの項目が古いままで新しい項目が反映されない場合があります。回避策を教えてください。
 

2012/11/30

A. はい、IE(Internet Explorer)8などの設定でWebサイトの基本設定を保持する設定にしてある場合、そのような現象になることがあります。
その場合は、クライアント側で次の操作を行うことで新しい項目が反映されます。

<IE8の場合>
IEの「ツール」メニュー→「インターネットオプション」→「全般」タブ→「閲覧の履歴」→「削除」ボタン、で表示される画面で、一番上の「お気に入りWebサイトデータを保持する」のチェックをはずします。


 

65 Silverlight

Silverlight用のサンプルプロジェクトの実行時、レンダリング中にエラー

Q. Silverlight用のサンプルプロジェクトの実行時、レンダリング中に以下のようなエラーが出る場合があります。

メッセージ: Unhandled Error in Silverlight Application
Code: 4004
Category: ManagedRuntimeError
Message: System.Xml.XmlException: ルート レベルのデータが無効です。
 行 103、桁 14。
場所 System.Xml.XmlTextReaderImpl.Throw(Exception e)
場所 System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
場所 System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace()
場所 System.Xml.XmlTextReaderImpl.ParseDocumentContent()
場所 System.Xml.XmlTextReaderImpl.Read()
場所 PerpetuumSoft.Reporting.Silverlight.Client.Localization.
LocalizationManager.LoadDictionary(Stream xmlStream)
場所 PerpetuumSoft.Reporting.Silverlight.Client.Localization.
LocalizationManager.ResponseProceed(IAsyncResult result)
  -- 中略 --
URI: http://localhost:5555/SilverlightDemoTestPage.aspx

回避策を教えてください。
 

2012/11/30

A. はい、IE(Internet Explorer)に保存されているキャッシュなどの情報によってはそのような現象が確認されています。

【回避策】
次の通り、IEの設定をリセットします。

<IE8の場合>
IEのメニューより「ツール」→「オプション」、以降は以下の通りです。


「リセット」ボタンを押します。


「個人設定を削除する」にチェックを入れて、「リセット」ボタンを押します。
 

64 Silverlight

開発環境

Q. SharpShooter Reports JP.Silverlightでの開発に必要な環境を教えてください
 

2012/11/30

A. はい、次の通りです。

・Microsoft Visual Studio 2010

・Microsoft Silverlight Tools for Visual Studio 2010(日本語版)
これをインストールすると「Microsoft Silverlight SDK(日本語版)」もインストールされます。
 

63 全般

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

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

2012/11/30

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

62 Web

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

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

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

解決策はありますか?
 

2012/11/30

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

61 全般

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

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

解決策はありますか?
 

2012/11/30

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

60 Web

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

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

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

解決策はありますか?
 

2012/11/30

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

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

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

59 全般

サンプルプロジェクト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/11/30

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

58 Web

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

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

2012/11/30

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

<script type="text/javascript">

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

</script>

 

57 Web

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

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

2012/11/30

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>

 

56 Web

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

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

2012/11/30

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>

 

55 全般

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

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/11/30

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

54 Win

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

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

2012/11/30

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

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

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

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

 

53 Win

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

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

2012/11/30

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が必要です。
 

52 全般

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

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

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

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

2012/11/30

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オブジェクトのセットで必要な列数分に振り分け、データを横方向に表示することができます。

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

51 全般 ツールボックスへの登録

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

2012/11/30

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

 

50 全般

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

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

2012/11/30

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

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

このように、JISのB列(B5、B4、B3など)を利用するプリンタで印刷する場合は、SharpShooter Reportsのデザイン上で、用紙サイズを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
 

49 全般

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

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

2012/11/30

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

48 全般

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

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

2012/11/30

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

47 全般

 

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

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

2012/11/30

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

46 全般

 

罫線の引き方

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

2012/11/30

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

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

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

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

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

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

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


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

Groups_Keisen.zip

 

45 全般

 

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

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

2012/11/30

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

ScrollBarOnOff.zip

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

44 全般

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

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


 

2012/11/30

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;
}

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

 

43 全般

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

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

2012/11/30

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

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

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

42 Win

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

Q. エンドユーザーデザイナとは何ですか?
また、エンドユーザーデザイナと
レポートビューアの編集は違うのですか?
 

2012/11/30

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

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

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

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

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

41  

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

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

2012/11/30

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

40 全般

表の列数の動的な変更

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

2012/11/30

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

【実行例】




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

DynamicColumnsSample.zip
 

39 全般

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

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

2012/11/30

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ページのドキュメントの生成が終了してからメッセージボックスが表示されます。
 

38 全般

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

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


 

2012/11/30

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

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

GyoTakasa.zip
 

37 Win

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

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

2012/11/30

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

reportViewer1.PageIndex = 10;
 

36 全般

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

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


 

2012/11/30

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

35 全般

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

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


 

2012/11/30

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



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

CrossBand.zip
 

34 全般

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

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

2012/11/30

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

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

SharpShooter Reportsのレポートデザイナ上の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)Visual Studio上でのコードによる設定

この方法は、SharpShooter Reportsのレポートデザイナではなく通常のVisual Studio上のコードエディタで記述する方法です。

基本的には上記の@と同じ考え方で、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
 

33 Win

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

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

2012/11/30

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();
 

32 全般

日付の和暦表現

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

2012/11/30

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

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

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

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

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

31 全般

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

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

2012/11/30

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

■SharpShooter Reports のレポートビューア上で、エクスポートする場合
「レポートのエクスポート」ダイアログでファイルの種類を「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;
 

30 全般

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

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

2012/11/30

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

29

 

全般

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

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

2012/11/30

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

28 全般

PDF出力で文字化け

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

2012/11/30

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

27 全般

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

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

2012/11/30

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

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

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

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

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

26 全般

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

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

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

2012/11/30

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」や「ダブルパス」で検索し、ヒットするコンテンツをご覧ください。
 

25 全般

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

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

2012/11/30

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

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

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

ArrayAndChart.zip
 

24 全般

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

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

2012/11/30

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

TeeChartReportControl.zip

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

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

23 全般

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

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

2012/11/30
(2012/12/13
更新)

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

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

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

(例)
PerpetuumSoft.Reporting. Designer.ReportDesigner,
 PerpetuumSoft.Reporting, Culture=neutral,
 
Version=6.3.0.49, PublicKeyToken=8a6ae・・・・・・
を次のようにします。
PerpetuumSoft.Reporting. Designer.ReportDesigner,PerpetuumSoft.Reporting

licenses.licxファイルへの記載内容

製品 コンポーネント名 licenses.licx上の記載
(フルネーム,アセンブリ)
SharpShooter Reports.Win ReportGenerator PerpetuumSoft.Reporting.
Components.ReportGenerator,
PerpetuumSoft.Reporting
ReportManager PerpetuumSoft.Reporting.
Components.ReportManager,
PerpetuumSoft.Reporting
ReportViewer PerpetuumSoft.Reporting.
View.ReportViewer,
PerpetuumSoft.Reporting
ReportDesigner PerpetuumSoft.Reporting.
Designer.ReportDesigner,
PerpetuumSoft.Reporting
SharpShooter Reports.Web ReportGenerator PerpetuumSoft.Reporting.
Components.ReportGenerator,
PerpetuumSoft.Reporting
ReportManager PerpetuumSoft.Reporting.
Components.ReportManager,
PerpetuumSoft.Reporting
SharpShooter
WebViewer
PerpetuumSoft.Reporting.
Web.SharpShooterWebViewer,
PerpetuumSoft.Reporting.Web
SharpShooter Reports.Silverlight ReportGenerator PerpetuumSoft.Reporting.
Components.ReportGenerator,
PerpetuumSoft.Reporting
ReportManager PerpetuumSoft.Reporting.
Components.ReportManager,
PerpetuumSoft.Reporting
ReportService
Base
PerpetuumSoft.Reporting.
Silverlight.Server.
ReportServiceBase,
PerpetuumSoft.Reporting.
Silverlight.Server
SharpShooter Reports.WPF ReportGenerator PerpetuumSoft.Reporting.
Components.ReportGenerator,
PerpetuumSoft.Reporting
ReportManager PerpetuumSoft.Reporting.
Components.ReportManager,
PerpetuumSoft.Reporting
(WPF用)ReportViewer PerpetuumSoft.Reporting.
WPF.ReportViewer,
PerpetuumSoft.Reporting.WPF
SharpShooter Reports.Enterpriseおよび
SharpShooter Reports.Professional
上記のコンポーネントで、作成するアプリケーションの種類(Win/Web/Silverlight/WPF)に応じたものを記載する

 

22 全般

メタフレームでの動作

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

2012/11/30

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

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

21 全般

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

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

2012/11/30

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

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

SharpShooter Reportsの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);

  }
}
 

20 Win

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

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

2012/11/30

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

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

19 全般

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

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

2012/11/30

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

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

【SharpShooter Reports の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
 

18 Win

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

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

2012/11/30

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
 

17 Win

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

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

2012/11/30

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の位置が変わるので、ページによってそれを考慮する必要があります。
その場合、全ページにそれら(見出しなど)を常に表示することが最も簡単です。
 

16 全般

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

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

2012/11/30

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

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

15 全般

明細行の高さを自動調整

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

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


 

2012/11/30

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

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

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

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

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

14 全般

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

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

2012/11/30

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
 

13 全般

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

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

2012/11/30

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();
  }
}
 

12 Win

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

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

2012/11/30

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
 

11 Win

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

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

2012/11/30

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

CreateReport.zip

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

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

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


●新規作成時

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

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

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

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

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

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

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

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

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

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
 

10 全般

SharpShooter Reportsをインストールできません

Q. Windows Vista7にSharpShooter Reportsをインストールしようとしているのですが、Windowsインストーラパッケージに問題がある、といったメッセージが表示されインストールできません。
回避方法を教えてください。
 

2012/11/30

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

9 Win

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

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

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

2012/11/30

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

8 全般

セッション変数の使い方

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

2012/11/30

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

SessionVariable.zip

 

7 全般

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

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

2012/11/30

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

 

6 全般

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

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

2012/11/30

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

5 全般

サブレポートについて

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

2012/11/30

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

4 全般

ページの最終行

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

2012/11/30

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

3 全般

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

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

2012/11/30

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

2 全般

データバンドの位置付け

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

2012/11/30

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

1 全般

SharpShooter Reports JPのVS 2003での利用

Q. SharpShooter Reports JPはVS 2003をサポートしますか?
 

2012/11/30

A. SharpShooter Reports JPはVS2003をサポートしません。
 

 

Copyright (C) NEWTONE Corporation. All rights reserved.