ニュートン メニュー

株式会社ニュートン

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

YouTube公式チャンネル

体験版ダウンロード

製品案内

ライセンスパック

ライセンスについて

カスタマイズ受付

製品購入ガイド

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

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

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

サポート体制

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

会社概要

個人情報保護方針

お問い合わせ先

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

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

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


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

QNo.

タイトル

Q. 質問

日付

A. 回答

50

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

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」ボタンを押しプロジェクトを開き、一度、プロジェクトの「リビルド」をお試しください。

49

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

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

2012/04/18
(2012/05/25更新)

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

残念ながら、現時点では根本的な回避策がございません。

一部、等倍指定した用紙が別のサイズに出力される、といった現象に限り、本ページのQNo.26に2012年4月16日付に緑色で追記したコードを追加することで回避できることがわかっています。


2012年5月25日時点で、
マイクロソフト社よりこの現象を修正する「修正プログラムパッケージ」が公開されましたのでご案内いたします。

マイクロソフト社の当該ページへのリンクは次の通りです。


http://support.microsoft.com/kb/2671605/ja

このページの中程に「このセキュリティ更新プログラムに関する既知の問題」として掲載があり、「マイクロソフトでは、Windows フォーム アプリケーションからの印刷に問題あることを認識しています。」とあります。
また、「この問題は現在調査中です。」となっています。

この問題についての、状況が変わり次第このページでご案内する予定です。


このページの中程に「このセキュリティ更新プログラムに関する既知の問題」と いう部分があり、その下に [FIX] としていくつかのリンクがあります。
この各リンクは、
.NET Framework のバージョン別でOS別になっています。

このリンク先のページを表示し、該当する
「修正プログラムパッケージ」をダウンロードしてインストールします。
該当するOSにインストールされているすべての
.NET Framework のバージョン分の「修正プログラムパッケージ」をインストールする必要があります。

なお、間違って別のOSや別のバージョンの
.NET Framework 用の
「修正プログラムパッケージ」をインストールしようとしてもメッセージが表示されインストールは実行されないようになっています。

したがって、インストールされている
.NET Frameworkのバージョンの判別ができない(判別をしない)場合は、OS分のすべての 「修正プログラムパッケージ」をインストールする、という方法もあります

また、
マイクロソフト社では
2012年6月中旬以降に、本件の修正をWindows Upadateでも行うことを表明しています。
 

48

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

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

2010/10/28

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

47

表の列数の動的な変更

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

2010/07/27

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

【実行例】




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

DynamicColumnsSample.zip
 

46

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

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

2010/02/12

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

45

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

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


 

2010/01/29

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

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

GyoTakasa.zip
 

44

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

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

2010/01/29

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

reportViewer1.PageIndex = 10;
 

43

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

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


 

2010/01/26

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

42

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

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


 

2010/01/26

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



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

CrossBand.zip
 

41

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

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

2010/01/18

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
 

40

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

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

2009/10/22

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

39

日付の和暦表現

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

2009/10/22

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

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

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

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

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

38

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

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

2009/10/09

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;
 

37

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

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

2009/10/09

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

36

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

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

2009/07/15

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

35

PDF出力で文字化け

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

2009/07/15

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

34

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

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

2009/06/30

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

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

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

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

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

33

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

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

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

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

32

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

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

2009/06/30

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

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

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

ArrayAndChart.zip
 

31

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

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

2009/06/29

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」にも記載してあります。
 

30

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

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

2009/06/29
(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

 

29

メタフレームでの動作

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

2009/06/29
2009/10/14

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

Report Sharp Shooterの64ビット版は現在ございませんが、Windows Server 2008 (x64) に Microsoft .NET Framework 2.0またはそれ以上がインストールされていれば、現行の32ビット用のReport Sharp Shooter で正常に動作します。この場合、64ビット版 Windows OS での、WOW64(Windows 32bit on Windows 64bit)によるエミュレータ機能で動作するということになります。

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

28

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

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

2009/05/11
(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);

  }
}
 

27

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

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

2009/04/07

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

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

26

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

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

2009/03/31

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
 

25

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

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

2009/03/04

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
 

24

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

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

2009/02/23

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

23

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

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

2009/02/23

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

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

22

明細行の高さを自動調整

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

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


 

2009/01/13

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

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

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

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

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

21

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

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

2008/12/05

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
 

20

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

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

2008/12/05
(2009/03/18 C#コード追記 )

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

19

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

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

2008/12/05

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
 

18

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

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

2008/09/29

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

ikou.pdf

 

17

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

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

2008/07/02

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
 

16

Visual Studio 2008のデザインのツールボックスに.NET Model Kit Suiteのコンポーネントが表示されません

Q. Visual Studio 2008がインストールされている環境に、.NET Model Kit Suiteをインストールしましたが、Visual Studio 2008のデザインのツールボックスに.NET Model Kit Suiteのコンポーネントが表示されません。
回避方法を教えてください。
 

2008/06/12
2008/07/30

A. .NET ModelKit Suite 3.7J のインストーラでは現在、Visual Studio 2008のIDEのツールボックスへのコンポーネントの自動登録のオプションがございませんので、次の通り手動で登録してください。

デザイン画面で「ツールボックス」上で右クリックメニューより
「タブの追加」を選び、たとえば".NET ModelKit Suite 3.7J"といった
名称で新しいタブを作成します。
その新しいタブ上から、右クリックメニューの「アイテムの選択」を使います。

「アイテムの選択」ダイアログで名前空間でソート後、
名前空間が[PerpetuumSoft]で始まるものすべてにチェックをいれます。
「OK」ボタンを押します。

Report Sharp Shooter 3.7J(バージョン3.8) で修正され、インストールすれば Visual Studio 2008でも自動的にツールボックスに登録されるようになりました。  

15

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

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


 

2008/06/05

A. Windows Vista上で次の設定を行ってください。
[コントロールパネル]→[ユーザアカウント]→[ユーザアカウント制御の有効化または無効化]→[ユーザアカウント制御(UAC)を使ってコンピュータの保護に役立たせる]のチェックを外してください。
その後、再度インストールを実行してください。

14

Report Sharp ShooterのVS 2008での利用

Q. Report Sharp ShooterはVS 2008と互換性がありますか?

2008/04/17
2008/07/30

A. 次のReport Sharp ShooterのリリースバージョンではVS2008と完全に互換性があります。現在のリリースバージョンはVS2008で動きますが、ツールボックスに必要なコンポーネントをご自身で追加しなければなりません。

Report Sharp Shooter 3.7J(バージョン3.8) で修正され、インストールすれば Visual Studio 2008でも自動的にツールボックスに登録されるようになりました。

13

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

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

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

2008/04/17

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

12

セッション変数の使い方

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

2008/04/17

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

SessionVariable.zip

 

11

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

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

2008/04/17

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つ配置できますか?

2008/04/17

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

9

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

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

2008/04/17

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ではどうすればよいですか?

2008/04/17

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

7

ページの最終行

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

2008/04/17

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

6

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

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

2008/04/17

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を設定できますか?

2008/04/17

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

MultiColumn.zip

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

Q. でも、データバンドのColumnCountプロパティを使う代わりにデータバンドを2つ使っていますが・・
データバンドを1つだけ使って
ColumnCountを2にしたいのですが…

A.データバンドを2つ使う以外に解決方法はありません。

4

データバンドの位置付け

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

2008/04/17

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

3

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

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

2008/04/17

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

 Report Sharp Shooter 1.8J 製品ページ

 

2

用紙サイズの設定

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

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

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

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

2008/04/17

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オブジェクトです。

2008/04/17

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.