Access Page number in report body In SSRS - reporting-services

I want to use Globals!PageNumber in Report body part. How can I access inside Report body?
I am using SQL Server Reporting Service 2008 R2.

Create functions in the code under the report properties:
Page Number:
Function PageNumber() As String
Return Me.Report.Globals!PageNumber
End Function
Total Pages:
Function TotalPages() As String
Return Me.Report.Globals!TotalPages
End Function
Access it in the body via an expression:
=code.PageNumber & " of " & code.TotalPages
Check out Sample Usage of the Concat Function

Unfortunately in Reporting Services (up to RS2008), this will produce "Page 1 of 1" on every page. The problem is that the body is rendered before the header and footer, therefore the code cannot access the correct pagination, since it is determined AFTER all elements in the body.
If your report is basically a large table with predefined number of rows on each table, try using row_number in your SQL as a workaround to manually calculate page numbers: http://social.msdn.microsoft.com/Forums/en-US/sqlreportingservices/thread/c2047eee-41a8-4d79-ae58-dbf60f6e7554/

you can't use page number in body. use it only in report footer or header.

For that you need to use Report variables:
Go to Report Menu from main Menu in Visual Studio, > Click on Report Properties > Add new variable - named as PageCount (Default value to 0)
Then inside header of footer create one textbox and set below expression,
=Variables!PageCount.SetValue(Variables!PageCount.Value+1)
It will automatically increase for each page.
NOTE: Do not hide it from header or footer, the SetValue will not work if you hide the box, so change the font of textbox to white color. (Do whatever you want but just do not hide it. Then you can use below expression to fetch pagenumber value inside report body.
=Variables!PageCount.Value
I have taken reference from this answer.

Related

Use multiple ReportItems in one expression in RDLC Report

I want to display page wise sum of 2 columns in footer.for that I am using following expression in footer
=Sum(ReportItems!col1.Value) + Sum(ReportItems!col2.Value)
but it gives following error
"The Value expression for the textrun refers to more than one report item. An expression in a page header or footer can refer to only one report item."
anybody knows how can I solve this issue and display page wise sum in footer ?
Thanks
Here is simple workaround for your problem:
Add single textbox to the body of the report and name it i.e. "SUM"
Add your expression to this textbox =ReportItems!col1.Value + ReportItems!col2.Value
For this textbox set visibility as hidden
In the footer refer to this hidden textbox using =ReportItems!SUM.Value
I usually use Custom code-feature of report for these operations. Just open Report Properties and choose Code-view. Just then write basic VB get/set-methods to save and sum values.
Referring to methods in TextBox expression goes just like this: =Code.[YourMethodNameHere].
For example, saving value:
=Code.SaveMyValue(Fields!MyVal.Value)
and getting value:
=Code.GetMyValue()

How do I print multiple duplicate "named" copies of a report in SSRS 2008? eg, "ORIGINAL", "CUSTOMER COPY", etc

I want to be able to have a multi-value parameter called CopyTypes, which would contain values such as:
{ "ORIGINAL", "CUSTOMER COPY", "PACKING LIST" }
I would like the report to create an identical page for each value in my parameter array, only changing a single text variable in the page footer for each page.
I had thought of just using a single value parameter and calling the report in code once for each param, but this solution isn't ideal.
Here's a setup that may work for you:
Create a subreport for the "single page" with a fixed height
In the subreport, create a parameter "FooterText"
Display the parameter at the bottom of the page (footers of subreports don't show up)
Create a parent report, with that subreport in a list
Create a dataset that generates a row for each selected value in the parameter
Pass that dataset's values as a parameter to the subreport
See my answer to another question on how you could convert the selected values to a dataset.
Bottom line is that you can't really relate stuff in the header/footer of a report to the content of a page: they're quite "static" in that regard. This is particularly a problem for the footer (and also in my suggestion above), because if you "fake" a footer in the report body it may be "shoved off" the page if the body content grows. If that's a problem it may be worth to consider a workaround, and place the text in the ("fake") header e.g. at the top of the subreport.

Access: Min function error on report page header

I am trying to get the min() and max() date of the current query to display on the Page Header section.
My textbox is as follows
="Range date: " & Min([myDate]) & " to " & Max([myDate])
I am getting the #Error message on Access 2010 (MS Access 2003 file format, .mdb).
AFAIK, you can't use those in the page header, but you can use them in a group header/footer and in report header/footer. And you can force new page in a group headre/footer.
Otherwise, you will need a report level variable that you increment in the Detail_Format section, and that you reset in the PageHeaderSection_Format.
You could also have a control in the page header that refers to the one in the group header. That might be the easiest solution.
In the page header, you will need DMin and DMax, as far as I recall.
-- http://msdn.microsoft.com/en-us/library/aa159048(v=office.10).aspx
If I needed this, I'd tend to put it in the report's Recordsource, and then the values would be available anywhere in the report.

Reporting Services - Group Name in Page Header

I have a report with one group (Office Name) which page breaks between each group - so the data for only one Office can appear on a given page. How do I get that Office Name to appear in the page header?
I tried creating a hidden textbox in the details section of the report which has the Office Name value and then referencing that in the Page Header, but I get the last Office Name value on page 1 and then it is blank on every other page.
Today, at last I found another way to do this.
On the group that you specified the page break, in the properties window, expand the Group section.
See Pagination in Reporting Services (Report Builder and SSRS)
You can set the BreakLocation property in the Tablix Properties,
Rectangle Properties, or Group Properties dialog boxes, but you must
set the Disabled, ResetPageNumber, and PageName properties in the
Report Builder Properties pane.
You should see a PageName field. This field can be set to that of one of the field data values from the dataset used by the tablix.
Once you have set the PageName field, you can add a textbox to the Page Header/Footer and set the expression to use the PageName field. Built-in Globals and Users References (Report Builder and SSRS)
=Globals!PageName
This should then change on each group change, and be visible on each page.
I have realy struggled finding a good solution for this, so if I need to clear up the answer, please feel free to suggest this.
I got it to work and I'll post the answer in case someone else runs across this issue.
For some reason referencing the text box did not work, but when I put a hidden column in the table with the same value, I could then reference that in the Page Header.
I am actually doing this in the footer and it worked! Thanks! Just wanted to add if you have multiple values you are trying to display in the header or footer, you can string them together with a delimiter in the pagename expression like
=Fields!FIELD1.Value + "|" + Fields!FIELD2.Value + "|" + Fields!FIELD3.Value + "|" + Fields!FIELD4.Value
Then you can create new fields (one for each value) and parse out each field like
=(Split(Globals!PageName, "|")).GetValue(0)
=(Split(Globals!PageName, "|")).GetValue(1)
=(Split(Globals!PageName, "|")).GetValue(2)
=(Split(Globals!PageName, "|")).GetValue(3)

How can I show data in the header of a multipage SSRS 2005 report?

This question was very helpful, however I have a list control in my report, and when the report grows over 1 page, data in the header only shows up on the last page of the report.
Apparently, hidden textboxes have to be on every page of the report for header to function properly. How do I do that? The only control I have in the list is a textbox with bunch of text that grows way over 1 page.
Although SSRS does not allow us to use DataSet fields in page headers, it allows us to refer to report items. So we could place a textbox (that takes its value from a DataSet field) anywhere in our report's body and set its Hidden property to true.
Then, we could easily refer to that textbox in the page header with an expression like: =ReportItems!TextBox1.Value and we are done. Note that the textbox that is being referred should be present on every page, or otherwise the header will print an empty value.
sExchange website to the rescue!!!
All I needed to do is to use Report Parameters with queried values from my dataset; and then reference =Parameters!Name.Value in the textbox in the header of the report.
Select Report Parameters, Add new parameter and check hidden, allow null and allow blank value.
If you are retrieving the values from database:
Under Available Values:
check "from query" radio button and provide dataset,value field and label fields.
Under Default Values:
check "from query" radio button and provide dataset,value fields.
Now provide the value for text box in the footer/header as =Parameters!Footer.Value (Footer is the parameter name).
the hidden text boxes can be placed within a rectangle that was a repeatwith property set to be your list item.