ニュートン メニュー

株式会社ニュートン

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

YouTube公式チャンネル

体験版ダウンロード

製品案内

ライセンスパック

ライセンスについて

カスタマイズ受付

製品購入ガイド

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

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

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

サポート体制

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

会社概要

個人情報保護方針

お問い合わせ先

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

帳票コンポーネント
Report Sharp Shooter 1.8J

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


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

QNo.

Q.質問

日付

A.回答

49

 

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 NineRays.Reporting.DOMDocument ShiftLeft(NineRays.Reporting.DOMDocument document, float shift)

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

■引数

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

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

■コード例

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

<C#>

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

private void button1_Click(object sender, System.EventArgs e)
{
    NineRays.Reporting.DOM.Document document = reportGenerator1.Template;
    Rss_ShiftElements.RssShiftElements rse = new Rss_ShiftElements.RssShiftElements();

    rse.ShiftLeft(document, (float)-0.5); //左へ0.5(cm)移動
    reportGenerator1.Prepare();

    if (reportGenerator1.Template!=null)
   
    try
    {
        reportGenerator1.Prepare();
        using(NineRays.Reporting.View.PreviewForm previewForm = new NineRays.Reporting.View.PreviewForm(reportGenerator1))
        {
            previewForm.WindowState = FormWindowState.Maximized;
            previewForm.ShowDialog(this);
        }
    }
    catch(Exception ee)
    {
        MessageBox.Show(ee.Message, "Report Sharp-Shooter", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

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

using System;

using NineRays.Reporting.DOM;
using NineRays.Basics.Drawing;

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

        //左シフトメソッド
        public Document ShiftLeft(Document document, float shift)
        {
            float shiftInInternalUnit = Unit.Convert(shift,Unit.Centimeter,Unit.InternalUnit);
            for(int i=0;i<document.Pages.Count;i++)
            {
                SetNewLocation(document.Pages[i],shiftInInternalUnit);
            }
            return document;
        }

        private void SetNewLocation(ReportControl control,float shift)
        {
            NineRays.Reporting.DOM.ContainerControl containerControl = control as NineRays.Reporting.DOM.ContainerControl;
            if(containerControl!=null)
            {
                for(int i=0;i<containerControl.Controls.Count;i++)
                {
                    SetNewLocation(containerControl.Controls[i],shift);
                }
            }
            VisualControl visualControl = control as VisualControl;
            if(visualControl!=null)
            {
                visualControl.Location = new Vector(visualControl.Location.X+shift,visualControl.Location.Y);
            }
        }

    }
}

<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 NineRays.Reporting.DOM.Document = ReportGenerator1.Template
    Dim rse As New RssShiftElements

    rse.ShiftLeft(document, CSng(1.5)) '右へ1.5(cm)移動
    reportGenerator1.Prepare()

    If Not (ReportGenerator1.Template Is Nothing) Then
        Try
            ReportGenerator1.Prepare()
            Dim previewForm As NineRays.Reporting.View.PreviewForm = New NineRays.Reporting.View.PreviewForm(ReportGenerator1)
            previewForm.WindowState = FormWindowState.Maximized
            previewForm.ShowDialog(Me)
        Catch ee As Exception
            MessageBox.Show(ee.Message, "Report Sharp-Shooter", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End If

End Sub

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

Imports System

Imports NineRays.Reporting.DOM
Imports NineRays.Basics.Drawing

Namespace Rss_ShiftElements

    Class RssShiftElements

        'コンストラクタ
        Public Sub New()
        End Sub

        '左シフトメソッド
        Public Function ShiftLeft(ByVal document As Document, ByVal shift As Single) As Document

            Dim shiftInInternalUnit As Single = Unit.Convert(shift, Unit.Centimeter, Unit.InternalUnit)
            For i As Integer = 0 To document.Pages.Count - 1
                SetNewLocation(document.Pages(i), shiftInInternalUnit)
            Next

            Return document
        End Function

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

            Dim containerControl As NineRays.Reporting.DOM.ContainerControl = Nothing
            If TypeOf control Is NineRays.Reporting.DOM.ContainerControl Then
                containerControl = CType(control, NineRays.Reporting.DOM.ContainerControl)
            End If

            If Not containerControl Is Nothing Then
                For i As Integer = 0 To containerControl.Controls.Count - 1
                    SetNewLocation(containerControl.Controls(i), shift)
                Next
            End If

            Dim visualControl As NineRays.Reporting.DOM.VisualControl = Nothing
            If TypeOf control Is NineRays.Reporting.DOM.VisualControl Then
                visualControl = CType(control, NineRays.Reporting.DOM.VisualControl)
            End If

            If Not visualControl Is Nothing Then
                visualControl.Location = New Vector(visualControl.Location.X + shift, visualControl.Location.Y)
            End If

        End Sub

    End Class

End Namespace

48

 

Q. イメージファイルへのエクスポートで、TiffでのFAX-CCITT3形式(圧縮)の出力、BMPで白黒2値での出力はそれぞれできますか?

2007/10/11

A. 残念ながら、できません。Tiffでは、「LZW圧縮」、BMPでは「1677万色・24ビット」固定です。
また弊社別製品、イメージ処理コンポーネント「ImageKit.NET」をご利用いただければ、Report Sharp Shooter 1.8Jでエクスポートした上記ファイルを読み込んでご希望の形式に変換して保存する、といった一連のコードを書くことができます。
「ImageKit.NET」の製品紹介ページはこちらです。

47

 

Q. DataBand 内に Header と Detail があります。DataBand 内で改ページされた場合、 Header を表示できますか?

2007/09/13

A. はい、RepeatEveryPage プロパティを利用してください。ページ毎にヘッダーを表示する場合は、RepeatEveryPage プロパティを True にします。

46

 

Q. 日付型のデータを西暦や和暦で表示する方法を教えてください。

2007/09/13

A. はい、次の通り、コードで記述する方法とデザインで設定する方法を示します。(VB.NET)

【コードで実現する場合の例】

以下のコードは、デザイン上の1ページ目に2つの TextBox ( textBox1 と textBox2 )を配置した前提です。また、和暦の「平成」については恒久的ではありませんのでご注意ください。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim TB1 As NineRays.Reporting.DOM.TextBox = ReportGenerator1.Template.Pages(0).ControlByName("textBox1")
    Dim TB2 As NineRays.Reporting.DOM.TextBox = ReportGenerator1.Template.Pages(0).ControlByName("textBox2")

    '現在日付をセット
    TB1.Value = Format(Now, "yyyy年MM月dd日")
    TB2.Value =
"平成" + CStr(Year(Now) - 1988) + "年" + Format(Now, "MM月dd日")

End
Sub

【デザインで実現する場合の例】

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

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

1.yyyy年MM月dd日の場合

  Format(dataBand1("xDate"),"yyyy年MM月dd日")

2.平成yy年MM月dd日の場合

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

45

 

Q. 請求書などで1枚は控えとして同じ明細を2枚ずつ出力する簡単なデザイン例を教えてください。

2007/06/20

A. はい、次の通り簡単なサンプルプロジェクトを用意いたしましたのでご利用ください。

次のリンクよりダウンロードできます。→DublicateInvoice


以下は、画面例です。

【プレビュー】

【デザイン】

 

44

 

Q. コンビニエンスストアの払い込み用紙のバーコードなどで利用される UCC/EAN-128 の出力には対応していますか?

2007/06/14

A. はい、対応しています。以下に基本的な設定を示します。
デザイナ上で BarCode オブジェクトを配置します。BarCode オブジェクトの CodeType プロパティを CodeEAN128C に設定します。Code プロパティに、出力したい文字列を設定します。必要に応じて、 ShowLabel プロパティや Font プロパティなどを設定します。

43

Q. レポートの任意の箇所で改ページをするにはどうしたらよいですか?

2007/05/10

A. はい、NewPageBefore プロパティを使用します。
たとえば、グループヘッダの NewPageBefore プロパティを True に設定すると、そのグループヘッダを表示する前に改ページしますので、異なるグループの明細は同一ページには表示されなくなります。
またその際、不要な最初の空ページは表示されません。

この NewPageBefore プロパティ は、Header、GroupHeader、DataBand、Detail などの複数のオブジェクトで利用できます。

42

Q. ビューアやデザイナのUI(ユーザインターフェース)の言語をコード(プログラム)で指定できますか?

2007/05/10

A. はい、できます。
Report Sharp Shooter 1.8J は16のローカライズ言語が利用できます。各言語は.xmlファイルに格納されています。このxmlファイルはデフォルトでは、「Report Sharp-Shooter\Localization」フォルダに格納されています(例:"C:\Program Files\9Rays.Net\Report Sharp-Shooter\Localization")。

ローカライズ言語ファイルへのパスを指定するメソッド NineRays.Basics.Localization.LocalizationManager.Load を利用することで、言語を指定できます。
以下にコード例を示します。

'日本語
NineRays.Basics.Localization.LocalizationManager.Load("..\japan_language.xml")

'英語
NineRays.Basics.Localization.LocalizationManager.Load("..\english_language.xml")

この際、
ローカライズ言語ファイルへのパスに指定した場所に実際にそのファイルが存在している必要があります。存在しない場合、自動的に(デフォルトの)英語になります。
これらのメソッドはビューアやデザイナを表示する前に実行してください。また、たとえばビューアの表示後でも、

NineRays.Basics.Localization.LocalizationManager.Load("..\japan_language.xml")
ReportViewer1.Refresh()

といったように再表示することで言語が切り替わります。

41

Q. Report Sharp Shooter 1.8J をインストールしたPCでビューアやデザイナが英語になる時があります。再インストールすると日本語に直るのですが、原因は何ですか、また回避策はありますか?

2007/05/10

A. お客様はおそらく弊社Web上のReport Sharp Shooter 1.8J のClickOnceデモを実行されたのではないのでしょうか。
そのデモ実行後に、ビューアやデザイナのUI(ユーザインターフェース)がいままで日本語だったものが英語になってしまう状況を弊社でも確認いたしました。

以下に原因と回避方法を掲載いたします。

【原因】

Report Sharp Shooter 1.8J でビューアやデザイナに日本語化するには、「アプリケーションの配布」(Distribution.pdf) にあります通り、次のレジストリに japan_language.xml の場所を指定します。

 HKEY_CURRENT_USER→Software→9Rays.net→Report Sharp-Shooter→Settings
 Settingsキーに下記の値を設定します。
  名前 : LocalizationFile
  値のデータ : <ディレクトリ>\japan_language.xml

この「値のデータ」が、ClickOnceデモを実行するたびにパスのない(カレントの) japan_language.xml に書き換わります。

これは、ClickOnceデモを Report Sharp Shooter 1.8J がインストールされてない環境のPCで実行できるようにしてあるためです。この場合、 japan_language.xml はそのPCで実行されるプログラムと同じ場所(つまりカレント)に配置される設定です。
詳しくは、次のClickOnceデモページの下方の【ワンポイント】にも書いてございます。
http://www.newtone.co.jp/productrss186.html

ClickOnceデモとしては、それでよいのですが、実行環境のPCにReport Sharp Shooter 1.8J がインストールされている場合、前述のレジストリの「値のデータ」がReport Sharp Shooter 1.8J のインストール時のデフォルトでは、
  C:\Program Files\9Rays.Net\Report Sharp-Shooter\Localization\japan_language.xml
だったものが、ClickOnceデモを実行するたびに
  japan_language.xml
とだけなってしまい、プログラムの実行時のカレントに japan_language.xml が無い場合は、自動的に英語で表示される、といった今回の現象になります。

【回避方法】

@ClickOnceデモ実行後にレジストリの「値のデータ」を変更する

前述のレジストリの「値のデータ」を Report Sharp Shooter 1.8J のインストール時の
値にする。

デフォルトでは、
C:\Program Files\9Rays.Net\Report Sharp-Shooter\Localization\japan_language.xml
です。

Aプログラムの実行カレントに japan_language.xml を配置(コピー)する

プログラムの実行時のカレントに japan_language.xml を配置します。
VB.NETのIDEなら、カレントと実行(例:BIN)フォルダにそれぞれ配置すると、
デザイン時のデザイナも(デバッグ)実行時のビューアも日本語になります。

B(予防策として)弊社ClickOnceデモの実行をしない

【備考】

また、上記のClickOnceデモの実行にかかわらず、同様な現象になる場合は、前述のレジストリの「値のデータ」の値と japan_language.xml の実際の配置場所が合っていないことが原因として考えられますので、それらをご確認ください。

40

Q. Visual Studio 2005(VB.NET、C#)用のサンプルプログラムはありますか?

2007/03/14

A. はい、Report Sharp Shooter 1.8Jの最新のインストーラでは製品版、体験版ともに、Visual Studio 2005(VB.NET、C#)用のサンプルプログラムもインストールされます

また、次のリンクよりダウンロードできます。→RSS18J_VS2005Samples

付属サンプルプログラムの一覧はこちらです。→サンプルプログラム一覧(PDF)

■ご利用上の注意点

(1)サンプルプログラムフォルダについて
上記ファイルをダウンロードし、解凍すると「CSharp2005」と「VB2005」の2つのフォルダができます。そのフォルダを、下図のようにReport Sharp Shooter 1.8Jの製品版、体験版をインストールした時の
<ExamplesFolder>にコピー(または移動)してください。これらのサンプルプログラムでは、<ExamplesFolder>は、デフォルトの「C:\Program Files\9Rays.Net\Report Sharp-Shooter\Examples」を想定しています。なお、既に同フォルダが存在する場合は Visual Studio 2005(VB.NET、C#)用のサンプルプログラムが存在することになりますので上書きコピーは不要です。



(2)Webフォームサンプルプログラムについて
Webアプリケーションサンプルを利用するためには、IISで適切な仮想ディレクトリを作成してください。Webアプリケーションサンプルの「アプリケーション名(エイリアス)」と「ローカルパス」は下記の通りです。
ローカルパスは、 C:\Program Files\9Rays.Net\Report Sharp-Shooter\Examples を <ExamplesFolder> として表記しています。

【VB.NET】

アプリケーション名: WebPublishVB-MDB
ローカルパス: <ExamplesFolder>\VB2005\WebPublishVB-MDB
※このWebサンプルプログラムは、QNo.38と同等です。

アプリケーション名: WebPublishVB2005
ローカルパス: <ExamplesFolder>\VB2005\WebPublishVB

アプリケーション名: ReportSharpShooterVB2005
ローカルパス: <ExamplesFolder>\VB2005\VBWebDemo

【C#】

アプリケーション名: ReportSharpShooter2005
ローカルパス: <ExamplesFolder>\CSharp2005\WebDemo

アプリケーション名: WebPublish2005
ローカルパス: <ExamplesFolder>\CSharp2005\WebPublish

アプリケーション名: WebPublish12005
ローカルパス: <ExamplesFolder>\CSharp2005\WebPublish1
 

39

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

2007/03/09

A. はい、Visual Studio 2005(VB.NET、C#)で、ReportGeneratorの配置されているフォームのOwnerFormプロパティに(なし)が選択されている場合、そのようなエラーが表示されます。これは、同フォームのOwnerFormプロパティにそのフォーム(例:Form1)を選択することで回避できます。この現象はVisual Studio 2003では発生しません。

38

Q. Report Sharp Shooter 1.8Jを使ったWebアプリケーションで、デザイン時にデータソースを指定するのではなく、実行時にコードでデータベースのテーブルに対応したデータソースを作成し、読込データを既存レポートデザインに従ってPDF出力するような簡単なサンプルコードを示してください。

2007/03/02

A. Webフォームでデータベース(MDB)を使ったサンプルプロジェクトのコードの一部を掲載いたします。(VB.NET2005用)

同サンプルプロジェクトはこちらよりダウンロードできます。→WebPublishVB-MDB

■サンプルプロジェクトの概要
製品・体験版に付属のWebPublishVBをベースにしたWebアプリケーションです。
Webアプリケーションと同じフォルダにMDB(database.mdb)とReport Sharp Shooter 1.8Jのテンプレート(template2.rst)があります。

以下、コードについて簡単に説明いたします。

Server.HtmlEncodeを使って実行時のパスを取得しています。
FillDataSetFromDataBaseプロシージャは、MDBに接続し、OleDbDataAdapterにデータを読み込んでいます。
Page_Loadイベントでは、Report Sharp Shooter 1.8Jの既存テンプレートを読み込み、前述のFillDataSetFromDataBaseプロシージャでMDBデータを読み込み、「PDF」などの選択された出力形式でブラウザに表示します。

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

    Dim ApPath As String

    '現在実行しているサーバーアプリケーションのパス
    ApPath = Server.HtmlEncode(Request.PhysicalApplicationPath)
    Page.Response.Buffer = True
    Page.Response.ClearContent()
    Page.Response.ClearHeaders()

    'title(レポートタイトル)とformat(出力形式)は前Webページの引数として取得
    Dim title As String = Page.Request.QueryString("title")
    Dim format As String = Page.Request.QueryString("format")
    'データ読込プロシージャからデータセットを取得
    Dim DS As DataSet = FillDataSetFromDataBase()

    '取得したデータセットをreportGenerator1の「DataSource」として登録。
    'このコードは、コンポーネントデザイナ上でreportGenerator1の
    'DataSourcesプロパティで「データバインドエディタ」を利用して
    'データソースを登録するのと同じです。
    '---------------------------------------------------
    reportGenerator1.DataSources.Add("DataSource", DS)
    '---------------------------------------------------
    'ここで登録するデータセット名"DataSource"は、Report Sharp Shooterの
    'レポートデザイナ上でのdataBand1のDataSourceプロパティの値の
    '「DataSource.Syain」の「DataSource」と同名にする必要がある。
    'たとえば、reportGenerator1のデータセット名を"ABC"とした場合は、
    'レポートデザイナ上でのdataBand1のDataSourceプロパティの値は
    '「ABC.Syain」となる。

    'reportGenerator1にテンプレートを読み込み
    reportGenerator1.LoadTemplate(ApPath + "template2.rst")
    reportGenerator1.Template.Title = title

    Dim doc As Document = reportGenerator1.RenderDocument()
    Dim m As Stream = Response.OutputStream

    '前Webページで指示された出力形式の分岐
    Select Case (format)
    Case "PDF"
        Dim pdf As PDFExportFilter = New PDFExportFilter
        pdf.Export(doc, m)
        Page.Response.ContentType = "application/pdf"
    Case "HTML"
        Page.Response.ContentEncoding = System.Text.Encoding.UTF8
        Dim htm As HtmlExportFilter = New HtmlExportFilter
        htm.Export(doc, m)
    Case "Excel"
        Dim xls As ExcelExportFilter = New ExcelExportFilter
        xls.Export(doc, m)
        Page.Response.AddHeader("Content-Disposition", "attachment; filename=ReportPage.xls")
        Page.Response.ContentType = "application/excel"
    Case "Text"
        Dim csv As CSVExportFilter = New CSVExportFilter
        csv.Separator = " "
        csv.Export(doc, m)
        Page.Response.ContentEncoding = System.Text.Encoding.UTF8
    Case "RTF"
        Dim rtf As RTFExportFilter = New RTFExportFilter
        rtf.Export(doc, m)
        Page.Response.ContentEncoding = System.Text.Encoding.UTF8
        Page.Response.ContentType = "application/rtf"
        Page.Response.AddHeader("Content-Disposition", "attachment; filename=ReportPage.rtf")
    End Select
    Page.Response.End()

End
Sub

Private
Function FillDataSetFromDataBase() As DataSet
'------------------------------------------
'データ読込プロシージャ
'------------------------------------------
    Dim connection As New OleDb.OleDbConnection
    Dim ApPath As String
    '現在実行しているサーバーアプリケーションのパス
    ApPath = Server.HtmlEncode(Request.PhysicalApplicationPath)
    'データベース(MDB)への接続文字列の生成
    connection.ConnectionString = "Provider=""Microsoft.Jet.OLEDB.4.0"";Data Source=""" + ApPath + "database.mdb"""
    'データベース(MDB)オープン
    connection.Open()
    'SQL文作成
    Dim sqlCommand As String = "select * from Syain"
    'データアダプタの作成
    Dim adapter As New OleDb.OleDbDataAdapter(sqlCommand, connection)
    'データセットの作成
    Dim DS As New DataSet("Syain")
    'データアダプタを使ってデータセットに実際のデータを読み込み
    adapter.Fill(DS, "Syain")
    'データベース(MDB)クローズ
    connection.Close()
    'Functionプロシージャの戻り値としてデータセットを返す
    FillDataSetFromDataBase = DS

End
Function
 

37

Q. Visual Studio 2005でWebアプリケーションの実行時に、Initialize Component()で実行時エラーが出ます。回避策はありますか?

2007/03/02

A. はい、実行時に「適切なリソースが見つからない」といった実行時エラーになる場合があります。
エラーになるのは、次の条件の場合です。

【エラーになる条件】
「Visual Studio(以降、VS) 2005(.NET Framework 2.0)でWebフォーム(ASP.NET Webサイト)開発で、(VSの)コンポーネントデザイナに配置されたReport Sharp Shooter 1.8JのreportGeneratorコンポーネントに、関連付けられたデザインのリソースがある場合」

たとえば、reportGenerator1をダブルクリックしてデザイナが起動した時に既存のデザインが表示される場合はリソースがある、ということになり、デザイナが起動しても「レポートはありません」と表示されれば
関連付けされているデザインのリソースはない、ということになります。

VS2003やVS2005のWindowsフォームではこのエラーは発生しません。
原因は、保存したテンプレートのリソースから読んでいることにあります。VS2003ではテンプレートはリソースの中に保存されてそこから問題なく読まれます。VS2005のリソースではそれと異なった動作をするためです。

前述の条件下の場合、この現象は、次の通り回避できます。

1.reportGeneratorが自動生成するコードを削除する。
@まず、デザイナ上で必要なデザインを保存してください。
AWeb Form Designer Generated Code内のInitializeComponent()内のreportGenerator1の部分の「Me.reportGenerator1.Template = CType(・・・・・・・)」の行のみを削除してください。

2.テンプレートをファイルから読み込むようにコードを記述する。
  たとえば、
  'reportGenerator1にテンプレートを読み込み
  reportGenerator1.LoadTemplate(ApPath + "template2.rst"
)
  といったように、
LoadTemplateメソッドを使用します。

36

Q. 既存のレポートデザインファイルが複数あるのですが、それらを実行時にあたかもひとつのレポートのように自由に結合して印刷し、印刷時のプリンタ用スプールには単一のスプールとして出力することはできますか?

2006/09/25

A. はい、できます。

以下にその例を示します。

次の例では、デザイン時に、3つの
空のreportGenerator(1〜3)を配置しています。
reportGenerator1とreportGenerator2は既存レポートデザインファイルの読み込み用に、reportGenerator3は2つのレポートの結合用に利用しています。
また、GetMergedDocument関数は、複数のレポートをひとつに結合します。引数には、結合したいレポートのDocumentオブジェクトを必要なだけ列挙します。なお、このGetMergedDocument関数自体はReportSharpShooterで用意されているものではありません。PageCollectionのAddメソッドを活用した、ここで作成した関数です。

using System.Drawing.Printing;

private void button1_Click(object sender, System.EventArgs e)
{
    reportGenerator1.LoadDocument("Sample01.rst");
    reportGenerator2.LoadDocument("Sample02.rst");

    reportGenerator3.Document = GetMergedDocument(reportGenerator1.RenderDocument(), reportGenerator2.RenderDocument());
    //印刷
   
PrinterSettings ps = new PrinterSettings();
    reportGenerator3.Print(ps);

   
//プレビューの場合
    //PriviewDialog(reportGenerator3);
}

private NineRays.Reporting.DOM.Document GetMergedDocument(params Document[] docs)
{
    Document d =
new Document();
    Hashtable styleNames =
new Hashtable();
    for(int i = 0; i < docs.Length; i++)
    {
        for(int j = 0; j < docs[i].Pages.Count; j++)
            d.Pages.Add(docs[i].Pages[j]);
                foreach(Style style in docs[i].StyleSheet.Styles)
                {
                    if(styleNames.ContainsKey(style.Name))
                        throw new InvalidOperationException("Dublicate style name");
                    styleNames.Add(style.Name, style.Name);
                    d.StyleSheet.Styles.Add(style);
                }
    }
    return d;
}

35

Q. エンドユーザの選択によって、ページ番号のスタイルを変更できる印刷処理を作成します。たとえば、「1ページ」、「P.1」、「1頁」などです。これを、C#のプログラムから、実行時に動的にページ番号のスタイルを変更できますか?

2006/09/01

A. はい、できます。

以下の例では、1ページにヘッダ部分などに
配置した「textBox1」にページ番号を表示(印刷)します。
その際、通常はデザイン時に設定するtextBox1のバインドのGenerateScriptプロパティの内容を、コードで設定しています。
textBox1のGenerateScriptプロパティには、textBox1が作成される(=新しいページが作成される)たびに実行されるC#(またはVB.NET)のコードを指定します。
この場合は、textBox1のTextプロパティに「ページ番号(PageNumber)+"頁"」を指定しています。

またこれらの方法は、ヘッダやページ番号にかかわらず1ページ中の明細行にあるテキストボックスなどのGenerateScriptプロパティに、条件文を含んだ複数のコードを設定することで広く応用できます。

//C#

//ページ番号表示用のテキストボックスのスタイル設定

NineRays.Reporting.DOM.TextBox tb = (NineRays.Reporting.DOM.TextBox)reportGenerator1.Template.Pages[0].ControlByName("textBox1");
string Cmd = "textBox1.Text=PageNumber.ToString()+\"頁\";";
tb.GenerateScript = Cmd;

//以降は通常のプレビュー処理
try
{
    reportGenerator1.Prepare();
    using(NineRays.Reporting.View.PreviewForm previewForm = new NineRays.Reporting.View.PreviewForm(reportGenerator1))
    {
        previewForm.WindowState = FormWindowState.Maximized;
        previewForm.ShowDialog(
this);
    }
}
catch(Exception ee)
{
    MessageBox.Show(ee.Message, "Report Sharp-Shooter", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

※レポートデザイナ上の特定のオブジェクト(たとえば、textBoxなど)にC#やVB.NET上からアクセスするためのコードの説明は、「QNo.19」をご覧ください。

34

Q. PageのMargin.Leftプロパティに設定した値と、実際の印刷物を測定した値が異なる場合があります。なぜですか?

2006/09/01

A. 実際に複数のインクジェットプリンタやページプリンタで印刷しても、設定通りのマージンで印字されるものがある一方、1〜3mm程度余白が多く印字されるものもあります。これは、プリンタの紙送り機構の精度や用紙セットの許容範囲と思われます。印刷アプリケーション作成時は、プリンタによる(上、左)マージン微調整指定機能を付加されることを推奨いたします。

33

Q. TextBoxのLocation.Xプロパティを0と設定した時、印字文字の左端が印字されません。プレビューは問題なしで印刷すると現象がでます。なぜですか?

2006/09/01

A. これは、プリンタの上下左右の端部分にそれぞれ、印字できない領域があるためです。プレビューで表示されるのは、プリンタによるその領域を考慮していないからです。印刷デザイン時は、プリンタの未印字領域を考慮されることを推奨いたします。未印字領域は各プリンタの仕様などでご確認ください。

32

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

2006/08/11

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

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

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

//C#
using System.Drawing.Printing;

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

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

    printDialog1.Document = printDocument1;
    //印刷ダイアログの表示
    if (printDialog1.ShowDialog() == DialogResult.OK)
    {
        //Report Sharp Shooterでの印刷実行
        reportGenerator.Document = reportGenerator.RenderDocument();
        reportGenerator.Print(printDialog1.PrinterSettings);
    }
}

31

Q. レポートビューアの表示されているページが変わったら受け取れるイベントのような仕組みはないのでしょうか?

2006/08/07

A. 残念ながらそのものズバリというイベントはございません。
しかし、次のようなコードで同様な動作を実現できます。

Report Sharp Shooterのサンプルプロジェクト「CustomDesignerViewer」の「ViewerForm.cs」上のコードを例といたします。

(1)ページ比較用変数の定義

 「public class ViewerForm : System.Windows.Forms.Form」内の先頭部分で次の1行を追加します。

 private int oldPageIndex = 0 ;

(2)Timerのインターバルを利用して定期的(サンプルでは0.1秒に一回)にページをチェックするイベントを発生させる。 (既存「timer1_Tick」内)

    private void timer1_Tick(object sender, System.EventArgs e)
    {
      button1.Enabled = reportViewer1.Actions["PrevPage"].Enabled;
      button2.Enabled = reportViewer1.Actions["NextPage"].Enabled;
      button3.Enabled = reportViewer1.Actions["Print"].Enabled;

       //ここから追加行
       if (reportViewer1.PageIndex != oldPageIndex)
       {
        oldPageIndex = reportViewer1.PageIndex;
        MessageBox.Show(reportViewer1.PageIndex+1+"ページ");
       }
       //ここまで
    }

以上で実行しますと、「次のページ」ボタン操作やドラッグ操作などでページが変わるとメッセージボックスにそのページ数が表示されます。また、上記のreportViewer1.PageIndexプロパティは1ページ目は0から始まります。

30

Q. レポートビューア上でMouseDownなどマウスに関するイベントが効きません。どのようにしたらよいのでしょうか?

2006/08/07

A. レポートビューア上でのマウスクリックなどは、実行時にレポートビューア上を右クリックすると確認できますが、「パン、ズームイン、ズームアウト、ダイナミックズーム」などのビューア本来のズーム処理や表示内容のドラッグ処理に先に利用されるので、通常の MouseDown や DoubleClick でのイベントは利用できません。
その代わりに、次の2つの特別なイベントが用意されていますのでそれらをご利用ください。

ViewObjectClick イベント
ViewObjectDoubleClick イベント

ただし、ズーム操作などと競合することになりますので、そのイベント内でオペレータの操作が必要になるような処理には適しません。また、レポートビューア上ではズーム処理のためのマウス操作を停止することはできません。

29

Q. 実行時のレポートビューアの初期表示はデフォルトではページの幅に合わせて表示されますが、これをたとえば、75%で表示したい場合、どのようにすればよいですか

2006/08/07

A. 次のように設定します。

Report Sharp ShooterのreportViewerコンポーネントを配置しているフォームのLoadイベントに次のようにコードを1行加えますと、初期表示が75%表示になります。

//C#
private void ViewerForm_Load(object sender, System.EventArgs e)
{
   reportViewer1.Actions["Zoom75"].ExecuteAction();
}

そのほか、Report Sharp Shooterのレポートビューアに関しましては、多くのプロパティやメソッドが用意されており、様々なカスタマイズが可能です。詳しくは、「ユーザガイド」の「アプリケーションでレポートジェネレータを使用するには」→「Windows Formsアプリケーションでの操作」→「レポートビューアコンポーネントのプロパティ」などをご覧ください。

28

Q. ClickOnce には対応していますか?

2006/07/10

A. はい、対応しています。
Report Sharp Shooter 1.8J の製品紹介ページにClickOnceのデモページへのリンクを追加しました。ご活用ください。

27

Q. ノータッチ デプロイメント には対応していますか?

2006/05/19

A. はい、対応しています。
Report Sharp Shooter 1.8J の製品紹介ページにノータッチ デプロイメントのデモページへのリンクを追加しました。ご活用ください。

26

Q. .NET Framework 2.0がインストールされている環境にReport Sharp Shooterをインストールしようとすると "このセットアップは.NET Framework バージョン 1.1.4322を必要とします。・・・"というメッセージが表示されます。どうしたらよいのでしょうか?

2006/03/02

A. 2006/03/02付けで公開したインストールプログラムをご利用ください。

25

Q. Visual Studio 2005 には対応していますか?

2006/02/14

A. はい、Version( 1.9.5.1)より対応いたしました。

24

Q. データソースとしてプログラム側から1件ずつデータを取り込んで印刷したいのですが、このような使い方はできますか?

2006/01/30

A. はい、もちろんできます。
Report Sharp Shooterのサンプルプログラムの中にグリッドに表示したデータの任意の1行分を指定してプレビューボタンを押すとそのデータを使って簡単な単票(カード)1ページ分をプレビューする、というサンプルがございます。(サンプルプログラム名:WithoutBands)

このサンプルは、レポートデザイナで直接データをバインドしていません。その代わり、VS.NET側でPublic Classを作成して項目名を名前にしたPublic Propertyを介してレポートデザイナがデータを取得しています。

このサンプルは、手動で行を選択して手動でボタンを押しますが、プログラムで手順を制御することで、お客様の参考になると思います。

23

Q. レポートデザイナでの単票デザイン時に、スキャナで取り込んだイメージを利用したいのですが、実行時にはイメージを印刷しないようにできますか?

2006/01/30

A. できます。

まず、スキャナで取り込んだイメージファイルをレポートデザイナ上のPictureオブジェクトに指定します。
そして、デザイナのツールバーを使ってそのPictureオブジェクトを他のオブジェクトに重なって邪魔にならないように、すべてのオブジェクトの最背面に移動します。

この後、最も簡単な方法は、そのPictureオブジェクト(たとえば、picture1)のVisibleプロパティをFalseにするだけです。これで、レポートデザイン上では見えているイメージが、プログラムの実行時は表示されません。

また、実行時においても任意の条件によって自動的に表示・非表示の選択をさせるコードを記述することも、レポートデザイナ上だけで実現できます。

22

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

2006/01/30

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.19をご覧ください。

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

以下にコード例を示します。

<C#>
NineRays.Reporting.DOM.Header Head1 = (NineRays.Reporting.DOM.Header)reportGenerator.Template.Pages[0].ControlByName("header1");
Head1.GenerateScript = "System.Windows.Forms.MessageBox.Show(\"Header!\");";

<VB.NET>
Dim Head1 As NineRays.Reporting.DOM.Header = ReportGenerator1.Template.Pages(0).ControlByName("header1")
Head1.GenerateScript = "MsgBox (""Header!"")"

21

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

2005/08/09

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

20

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

2005/08/09

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

19

Q. レポートデザイナ上の特定のオブジェクト(たとえば、textBox5)にVB.NETからアクセスするにはどうコードを書けばよいですか?

2005/08/03

A. VB.NETで一度定義をして、あとは通常通りプロパティやメソッドなどを利用します。
以下に
Form1_Load での簡単な例を示します。

Private
Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

  Dim textBox5 As NineRays.Reporting.DOM.TextBox = ReportGenerator1.Template.Pages(1).ControlByName("textBox5")

  textBox5.Text = "テキスト5"

End Sub

この例では、レポートデザイン上の2ページ目にある「textBox5」という名前のTextBoxオブジェクトのTextプロパティに文字列"テキスト5"を設定しています。2ページ目は、Pages(1)で表しています。1ページ目のデザインならPages(0)です。「textBox5」という名前は、ControlByName("textBox5")で表します。

定義が正しく行われていれば、もちろんVB.NETのコードエディタでは利用可能なプロパティやメソッドが自動メンバ表示されます。

18

Q. Report Sharp Shooter 1.8J Professional (C#ソース付Edition)には、レポートデザイナのソースは添付されるのでしょうか?

2005/08/03

A. はい、Report Sharp Shooter 1.8J Professional にはレポートデザイナを含めたReport Sharp Shooter のすべてのソースコードが同梱されます。

17

Q. Microsoft Wordのように、ドキュメント内に目次を自動生成するにはどうすればいいですか?

2005/08/02

A. 次のサンプルを参照してください。

サンプルテンプレート「HyperlinksWithPageNumber.rst」を(対象をファイルに保存などで)適当なフォルダにダウンロードしてください。

【サンプルテンプレートの確認方法例】
Report Sharp  Shooterのインストールに含まれているSharpShooterDemoを実行します。「レポート型」は「Simple List」を「スタイルシート」は「Classic」を選んで、「デザイナ」ボタンを押します。レポートデザイナが開きますので「ファイル」メニューから「開く」で、ダウンロードした上記ファイルを開きます。「レポート」メニューから「プレビュー」を選択するとサンプルプレビューが表示されます。

16

Q. Page Footerはページ下部に印刷されますが、Group FooterとFooterは詳細セクションのすぐ後に印刷されます。Group FooterとFooterをページ下部に印刷する方法はありますか?

2005/08/02

A. 次のサンプルを参照してください。

サンプルテンプレート「FooterAndGroupFooterAtBottomPage.rst」を(対象をファイルに保存などで)適当なフォルダにダウンロードしてください。

【サンプルテンプレートの確認方法例】
Report Sharp  Shooterのインストールに含まれているSharpShooterDemoを実行します。「レポート型」は「Simple List」を「スタイルシート」は「Classic」を選んで、「デザイナ」ボタンを押します。レポートデザイナが開きますので「ファイル」メニューから「開く」で、ダウンロードした上記ファイルを開きます。「レポート」メニューから「プレビュー」を選択するとサンプルプレビューが表示されます。

15

Q. 縦横比を維持したままイメージの高さを指定して自動で増やすことはできますか?

2005/08/02

A. もちろん、できます。

サンプルテンプレート「ProportionalPictureSize.rst」を(対象をファイルに保存などで)適当なフォルダにダウンロードしてください。

PictureオブジェクトPicture1のSizeプロパティのバインドに注目してください。
次のようなコードが記述されています。

new Vector((dataBand1.LineNumber + 1) * 300, picture1.Image.Size.Height * (dataBand1.LineNumber + 1) * 300 / picture1.Image.Size.Width)

【サンプルテンプレートの確認方法例】
Report Sharp  Shooterのインストールに含まれているSharpShooterDemoを実行します。「レポート型」は「Simple List」を「スタイルシート」は「Classic」を選んで、「デザイナ」ボタンを押します。レポートデザイナが開きますので「ファイル」メニューから「開く」で、ダウンロードした上記ファイルを開きます。「レポート」メニューから「プレビュー」を選択するとサンプルプレビューが表示されます。

14

Q. 顧客別のレポートを印刷します。レポートは顧客によっては複数ページになることがあります。この場合、次のように顧客毎にPageNumber(ページ番号)を1にリセットするにはどうしたらよいですか?

Group Customer A - Page 1 of 3
Group Customer A - Page 2 of 3
Group Customer A - Page 3 of 3
Group Customer B - Page 1 of 2
Group Customer B - Page 2 of 2
Group Customer C - Page 1 of 1

何もコードを書いていない、初期状態では次のように印刷されます。

Group Customer A - Page 1 of 6
Group Customer A - Page 2 of 6
Group Customer A - Page 3 of 6
Group Customer B - Page 4 of 6
Group Customer B - Page 5 of 6
Group Customer C - Page 6 of 6

2005/08/02

A. サンプル(VB.NET と C#)を参照してください。

次のサンプルテンプレートを(対象をファイルに保存などで)適当なフォルダにダウンロードしてください。

NumeringPagesForEachGroup.rst (C#)

NumeringPagesForEachGroupVB.rst  (VB.NET)

Documentオブジェクトdoc1のCommonScriptプロパティ、GenerateScriptプロパティ、およびPageオブジェクトpage1のGenerateScriptプロパティに注目してください。

【サンプルテンプレートの確認方法例】
Report Sharp  Shooterのインストールに含まれているSharpShooterDemoを実行します。「レポート型」は「Simple List」を「スタイルシート」は「Classic」を選んで、「デザイナ」ボタンを押します。レポートデザイナが開きますので「ファイル」メニューから「開く」で、ダウンロードした上記ファイルを開きます。「レポート」メニューから「プレビュー」を選択するとサンプルプレビューが表示されます。

13

Q. ヘッダー内のテキストボックス(textBox3)にページフッター内のテキストボックス(textBox1)と同じ値を入れたいのですが、どうすればよいですか?

2005/08/02

A. textBox3のバインドのValueプロパティに「textBox1.Text」を設定してください。

12

Q. 通貨型データのマイナス表記で「△」や「▲」の表記指定は可能でしょうか?

2005/08/02

A. はい、「ユーザー定義」フォーマットを利用することで実現できます。

■実現方法

次のような、方法が最も簡単に実現できます。
デザイナ上の対象となる数値や金額などを表示するTextBoxのTextFormatプロパティを利用します。

TextFormatプロパティを選択して...ボタンをクリックして「フォーマット」エディタを起動します。
そのダイアログで、「フォーマット」を「ユーザー定義」にして、「マスクの形式」にたとえば、「#,##0.00;▲#,##0.00;0.00」を記述します。

マスクの形式にはこの例の場合、;(セミコロン)を区切り記号として左から順に「正の数の場合;負の数の場合;ゼロの場合」のそれぞれのフォーマットに#,##0.00、▲#,##0.00、0.00を指定したことになります。

参考までに、この例のデザイン例と実行例のスクリーンショットを添付しました。これは、製品付属のサンプル「TextFillExample」にフォーマットの変更を加えたサンプルです。





■「ローカル設定の使用」とは何が使われるのか?

同「フォーマット」エディタで「通貨」の場合で、「ローカル設定の使用」を選択するとOS上の「地域と言語のオプション」の「地域オプション」の「カスタマイズ」の中の「通貨」タブの設定が使われます。

11

Q. エクスポートされたPDFファイルやCSVファイルでUnicodeや外字は表示できるのでしょうか?

2006/02/14

A. Report Sharp Shooterは、Unicode対応ですが、エクスポートされたPDFとCSVに関しては次の通りです。

PDF形式へのエクスポート:
  フォントはファイルに組み込まれているので正常に動作するはずです。
  しかし現在、外字に関しては動作しません。これは、できるだけ早めに対応する予定です。

●外字に一部対応しました。(Ver.1.9.5.1)
Windowsフォーム:レポートビューア、PDF共に対応
Webフォーム:Webビューアのみ対応、PDFは非対応

CSV形式へのエクスポート:
  現在、Unicodeは動作しません。今後、対応する予定です。

10

Q. 複数ページの場合1ページ目、2ページ目を同時に印刷することはできますか。(ワンアクションで複数ページの印刷)

2005/08/02

A. はい、できます。

たとえば、同じデザイン上のPage1とPage2の2種類のレイアウトがある場合、ビューア上なら「ファイル」メニューの「印刷」の実行で、Page1とPage2の2種類のレイアウトのレポートが続けて印刷されます。

また、カスタムビューアを作成するなどして、プログラムで印刷する場合は、
ReportViewer1.Actions("Print").ExecuteAction()
といったコードで、2種類のレイアウトのレポートが続けて印刷されます。

9

Q. 複数のページレイアウトで構成されている一つのレポートを印刷する場合で、デフォルトでは複数のページレイアウトに関係なく一連のページ番号がカウントされますが、ページレイアウト単位でそれぞれのページ番号を1から始まるようにするにはどうしたらよいですか?

2005/08/02

A. レポートデザイナで次のように設定します。

以降の例では、レイアウトの異なるページが3つあると仮定します。
DocmentオブジェクトのCommon Scriptプロパティに次のコードを書きます。

Dim PageCnt2 As Integer = 0 '2ページ目レイアウトのページカウンタ
Dim PageCnt3 As Integer = 0 '3ページ目レイアウトのページカウンタ

2ページ目PageオブジェクトのGenerateScriptプロパティに次のコードを書きます。

PageCnt2 = PageCnt2 + 1
If PageCnt2 = 1 Then
  Engine.PageNumber = 1
End if

同様に、3ページ目PageオブジェクトのGenerateScriptプロパティに次のコードを書きます。

PageCnt3 = PageCnt3 + 1
  If PageCnt3 = 1 Then
    Engine.PageNumber = 1
End if

8

Q. 罫線はどうやって使いますか?

2005/08/02

A. レポートデザイナでデザインする場合の罫線は、ShapeコンポーネントやTextBoxコンポーネントを利用します。

Shapeコンポーネント(オブジェクト)
を利用してShapeStyleプロパティを「LineShape」に設定して関連する各プロパティで、色や線種などを指定します。

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

7

Q. 帳票上での列や行の集計機能は使えますか?

2005/08/02

A. はい、できます。

レポートデザイナ上で、各セクション(dataBandセクションなど)でAggregatesプロパティを選択して、Aggregatesコレクションエディタを起動し集計フィールドを指定し、数式と"集計名"を指定します。
実際に値を表示する
TextBoxなどのValueプロパティに、たとえば

dataBand3.Sum("集計名", dataBand1["CustNo"])

といった関数を記述します。
この関数の意味はdataBand1["CustNo"]の値、つまり顧客別の"集計名"集計からの合計を表します。
詳しくは、ユーザガイドの「レポートの作成について」→「集計関数の操作」をご覧ください。

また、関連した製品付属のサンプルプログラムには、
  GroupsAggregates (グループ内のデータ集計)
  MasterDetailAggregates (階層型表示のレポートでの集計)
  PageAggregates (ページ内のデータ集計)
がございます。

6

Q. エンドユーザーデザイナーを利用して、最初からエンドユーザにレポートを作成させる方法は?また、その場合データソースを利用することはできますか?

2005/08/02

A. 次の通りです。

次のコード(C#)で実行時にデザイナが起動します。

reportGenerator.DesignTemplate();

または、

reportGenerator.DesignTemplate(fileName); //fileName:テンプレートを保存するデフォルトのファイル名

 
この場合、設計時と同様にデータソースタブやドキュメントツリーなどすべての機能が利用できます。

また、レポートビューア上の「ドキュメント」メニューの「レポートの編集」を選択した場合に表示される「デザイナ」は、実際のデータをデザインにマップした形で表示され、出力用データの直接編集ができますが、設計のための「レポートデザイナ」とは用途が異なります。

5

Q. データソースはXMLに対応していますか?

2005/08/02

A. はい、対応しています。

詳しくは、ユーザガイドの「基本概念」→「データソース」→「データソースとしてXMLファイルを使用する」をご覧ください。また、サンプルプログラムは、「XmlDataSourceExample」にあります。

4

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

2005/08/02

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



この例の場合、レポートデザイナ上で

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

Dim stringCompany as string = ""

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

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

3

Q. PdfExportFilterにてPDFを作成しようと考えていますが、このPDFに、PDF文書を開く際にユーザパスワードを設定しセキュリティをかけることは可能でしょうか?

2005/08/02

A. この機能は現時点では、実現できません。
しかし、弊社のPDF作成コンポーネント「ABCpdf」と連携すれば十分なセキュリティをかけることができます。ABCpdfの詳細はこちらをご覧ください。

2

Q. 印刷ダイアログを表示してレポートを印刷する方法を教えてください。

2005/08/02

A. 次の通りです。

フォームにReportGeneratorコンポーネント(ReportGenerator1)があってレポートのデザインが既に存在するという前提です。
フォームに(Windows フォームの)PrintDocument コンポーネント(PrintDocument1)を追加します。
フォームに(Windows フォームの)PrintDialog コンポーネント(PrintDialog1)を追加します。

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

  PrintDialog1.Document = PrintDocument1
  If PrintDialog1.ShowDialog = DialogResult.OK Then '印刷「OK」時のみ
    ReportGenerator1.Document = ReportGenerator1.RenderDocument
    ReportGenerator1.Print(PrintDialog1.PrinterSettings)
  End If

End Sub

1

Q. フォーム上に「プレビュー」ボタンと「デザイン」ボタン、それとプレビューせずに直接印刷させる「印刷」ボタンを設けます。それぞれの基本的なコードを教えてください。

2005/08/02
2006/10/23更新

A. 次の通りです。

フォームにReportGeneratorコンポーネント(ReportGenerator1)があってレポートのデザインが既に存在するという前提です。
「プレビュー」ボタンは、印刷プレビューを表示します。「デザイン」ボタンは実行時にデザイナを表示します。「印刷」ボタンはプレビューを表示せずに直接印刷を実行します。

[
VB.NET]

'プレビューボタン
Private
Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
If Not (ReportGenerator1.Template Is Nothing) Then
Try
  ReportGenerator1.Prepare()
  Dim previewForm As NineRays.Reporting.View.PreviewForm = New NineRays.Reporting.View.PreviewForm(ReportGenerator1)
  previewForm.WindowState = FormWindowState.Maximized
  previewForm.ShowDialog(
Me)
Catch ee As Exception
  MessageBox.Show(ee.Message, "Report Sharp-Shooter", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End
If
End
Sub

'デザインボタン
Private
Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click
ReportGenerator1.DesignTemplate()
End
Sub

'印刷ボタン
Private
Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
If Not (ReportGenerator1.Template Is Nothing) Then
Try
  ReportGenerator1.Prepare()
  Dim ps As System.Drawing.Printing.PrinterSettings = New System.Drawing.Printing.PrinterSettings
  ReportGenerator1.Print(ps)
Catch ee As Exception
  MessageBox.Show(ee.Message, "Report Sharp-Shooter", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End
If
End
Sub

[C#]

//プレビューボタン
private void button1_Click(object sender, System.EventArgs e)
{
  if (reportGenerator1.Template!=null)
  try
  {
    reportGenerator1.Prepare();
    using(NineRays.Reporting.View.PreviewForm previewForm = new NineRays.Reporting.View.PreviewForm(reportGenerator1))
    {
    previewForm.WindowState = FormWindowState.Maximized;
    previewForm.ShowDialog(
this);
    }
  }
  catch(Exception ee)
  {
      MessageBox.Show(ee.Message, "Report Sharp-Shooter", MessageBoxButtons.OK, MessageBoxIcon.Error);
  }
}

//デザインボタン
private void button2_Click(object sender, System.EventArgs e)
{
  reportGenerator1.DesignTemplate();
}

//印刷ボタン
private void button3_Click(object sender, System.EventArgs e)
{
  if (reportGenerator1.Template!=null)
  try
  {
    reportGenerator1.Prepare();
    PrinterSettings ps =
new PrinterSettings();
    reportGenerator1.Print(ps);
  }
  catch(Exception ee)
  {
    MessageBox.Show(ee.Message, "Report Sharp-Shooter", MessageBoxButtons.OK, MessageBoxIcon.Error);
  }
}

 

Copyright (C) NEWTONE Corporation. All rights reserved.