web-dev-qa-db-ja.com

SSRS 2008 R2のレポート本文にページ番号を表示する方法

多くの開発者がSSRS 2008 R2を使用してページ番号を表示しようとする問題に直面していると思います。

別の解決策がありますSSRS 2010+バージョンが必要。それ以外の場合は、常に1を取得します。

"Report"-> "Report Properties"-> "Code"に移動します

Custom Codeセクションに、次のように入力します。

Public Function PageNumber() as String
     Dim str as String
     str = Me.Report.Globals!PageNumber.ToString()
     Return str
End Function

Public Function TotalPages() as String
     Dim str as String
     str = Me.Report.Globals!TotalPages.ToString()
     Return str
End Function

これで、レポートのどこからでもこれらの機能(ヘッダー、本文、またはフッター)にアクセスできるようになります。したがって、本文にあるテキストボックスにページ番号と合計ページを出力するには、値として次のように入力します。

="Page " + Code.PageNumber() + " of " + Code.TotalPages()

This ソリューションはSSRS 2008R2では機能しません。

ただし、回避策はありますが、2008 R2より高いバージョン(2008 R2を含む)で動作します。回答として投稿します。この問題に苦しんでいる人の助けになることを願っています。

8
Vin.X

最初にレポート変数を使用する必要があります:レポートの空白スペースを右クリック->変数-> PageCountなどの変数を作成(デフォルト値を0に設定)

次に、ヘッダーまたはフッターで->テキストボックスを作成して式を設定します->

_=Variables!PageCount.SetValue(Variables!PageCount.Value+1)
_

ページごとに自動的に増加します。 (重要:ヘッダーまたはフッターから非表示にしないでください。ボックスを非表示にするとSetValueが機能しないため、フォントを1に、テキストを白に変更してください。何でもしてください。非表示にしないでください (設定が行われると、「True」と出力されます))

次に、以下を使用できます。

_=Variables!PageCount.Value
_

レポート本文の任意の部分で、ページ番号にアクセスします。

重要:Globals!PageNumberを使用して変数を設定しようとしましたが、レポート本文からアクセスできなくなったことに注意してください。したがって、ヘッダー/フッターOR Bodyからアクセスできるものである必要があります。

私の場合、グループのインスタンスごとにページ番号をリセットする必要があります。そのため、グループの最後にトリガーを設定しました。 (たとえば、グループの両端ごとに合計が表示されることがわかっているため、合計値が返されるかどうかを確認します。

関数IIFのため、TrueとFalseの両方の部分が処理されるため、次のようにsetterをIIFに配置すると次のようになります。

_=IIF(IsNothing(ReportItems!TotalBox.Value),Variables!PageCount.SetValue(Variables!PageCount.Value+1),Variables!PageCount.SetValue(0))

 ) 
_

レポートは常に値0になります。レポートはTrueパーツをチェックしてからFalseパーツをチェックするため、両方のセッターが実行されます(値は2回設定されます)

したがって、2つのボックスと次のようなものが必要です:(チェック条件で不要なボックスを非表示にする必要があります)

_=IIF(IsNothing(ReportItems!TotalBox.Value),Variables!PageCount.SetValue(Variables!PageCount.Value+1),"")
)
_

NOT IsNothing(ReportItems!TotalBox.Value)の場合、このボックスを非表示にする必要があります

_=IIF(NOT IsNothing(ReportItems!TotalBox.Value),Variables!PageCount.SetValue(0),"")
)
_

ここでも、IsNothing(ReportItems!TotalBox.Value)のときにこのボックスを非表示にする必要があります

もちろん、他の方法を使用して、グループインスタンスの終わりを判断することもできます。たとえば、グループテーブルの終わりに固定値のみを含むテキストボックスを作成します。そしてそれを隠します。トリガーをチェックするときは、私と同じようなアプローチをしてください。

2008 R2(付属)以降のすべてのバージョンで正常に動作します。

11
Vin.X

Visual Studio 2013Report variablesは[レポート]メニューの下のVisibleになります。

メインメニューから-レポート> レポートプロパティ> 変数> 追加

0
Ajai sankaran

まず、以下の手順1に従って実行しますページネーション
1)
1.1。 [行グループ]ペインで[詳細]グループをクリックします。
1.2。 Tablixメンバーの[プロパティ]ペインで、[グループ]-> [PageBreak]を展開します。
1.3。 「BreakLocation」を「End」に設定し、「Disable」プロパティを次のような式に設定します。

=IIF(rownumber(nothing) mod 40=0,false,true)  

上記のポイント1は、レポート出力でページ付けを行うために使用されます(出力では1ページあたり40レコードのみを表示します)

2)カスタムコードを使用:

Public Function PageNumberno(val as integer) as String
     Dim str as String
     str =(val/40)
     Return str
End Function

3)データセットに計算列を作成し、=0

4)2つの計算された列
1)ページ番号
2)いいえ
データセット内

レポート本文では、式を使用してPageNo

=code.PageNumberno(Rownumber("DataSet1"))

式を使用していいえ

 =IIF(Instr(code.PageNumberno(Rownumber("DataSet1"))
,".")<>0,
(Left(code.PageNumberno(Rownumber("DataSet1")),
(Instr(code.PageNumberno(Rownumber("DataSet1")),".")-1))+1)
,code.PageNumberno(Rownumber("DataSet1"))
)

5)右クリックして右側に列を挿入し、列名にテキストボックスにコードを追加します

=ReportItems!No.Value

注:計算されたフィールドの列名はありません。

6)AdvancedMode IN Row GroupでStaticを選択し、RepeatOnNewPage PropertiesをTrueに設定します。

ポイント5で作成された上記の列では、レポートの本文のすべてのページに正しいページ番号が表示されます

私は試してみましたが、うまく機能しています。

0
Hell Boy

SQL Server 2016レポートビルダーを使用している場合、この式はうまくいきました。

=Globals!PageNumber.ToString() +"/" + Globals!TotalPages.ToString()
0
Mohammed Osman