多くの開発者が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を含む)で動作します。回答として投稿します。この問題に苦しんでいる人の助けになることを願っています。
最初にレポート変数を使用する必要があります:レポートの空白スペースを右クリック->変数-> 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(付属)以降のすべてのバージョンで正常に動作します。
Visual Studio 2013
Report variables
は[レポート]メニューの下のVisible
になります。
メインメニューから-レポート> レポートプロパティ> 変数> 追加
まず、以下の手順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で作成された上記の列では、レポートの本文のすべてのページに正しいページ番号が表示されます
私は試してみましたが、うまく機能しています。
SQL Server 2016レポートビルダーを使用している場合、この式はうまくいきました。
=Globals!PageNumber.ToString() +"/" + Globals!TotalPages.ToString()