|
QNo. |
タイトル |
Q.
質問 |
日付 |
|
A.
回答 |
|
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 |
|
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, Culture=neutral, 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 |
Report Sharp Shooter(Liteを除く全エディション)
および
ModelKit Suite |
ReportDesigner
(RSS.
RunTimeDesigner) |
PerpetuumSoft.Reporting.
Components.ReportManager,
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 |
|
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();
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; |
|