# encoding: ascii
# api: powershell
# title:
# description: Use SSRS ReportViewer with PowerShell, use parameters and catch navigate event
# version: 0.1
# type: script
# license: CC0
# x-poshcode-id: 1977
# x-archived: 2016-02-04T04:16:40
#
#
# by @bernd_k aka @sqlsulidae http://sqlsulidae.blogspot.com/
#
# This is an extension of the script you find at
# http://www.sqlmusings.com/2009/08/21/sql-server-powershell-how-to-view-your-ssrs-reports-rdl-using-powershell-and-reportviewer/
# I show how to provide parameters and how to catch the navigate event
# [void]
[System.Reflection.Assembly]::Load("Microsoft.ReportViewer.WinForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")
$rv = New-Object Microsoft.Reporting.WinForms.ReportViewer
$eventHandler = [Microsoft.Reporting.WinForms.HyperlinkEventHandler]{
#$this # $this is sender
Write-Host "Hyperlink Event fired"
Write-Host $_.Hyperlink # $_ are the event args
$_.Cancel = $true
}
$rv.Add_Hyperlink($eventHandler)
$rv.ProcessingMode = "Remote"
$rv.ServerReport.ReportServerUrl = "http://localhost/reportserver"
$rv.ServerReport.ReportPath = "/Reports/Sample Report"
#if you need to provide basic credentials, use the following
#$rv.ServerReport.ReportServerCredentials.NetworkCredentials=
# New-Object System.Net.NetworkCredential("myuser", "mypassword")
$rv.Height = 800
$rv.Width = 1200
$rv.Dock = [System.Windows.Forms.DockStyle]::Fill
# if you have more than 1 parameters
# $params = new-object 'Microsoft.Reporting.WinForms.ReportParameter[]' 2
# $params[0] = new-Object Microsoft.Reporting.WinForms.ReportParameter("Par1", "3159", $false)
# $params[1] = new-Object Microsoft.Reporting.WinForms.ReportParameter("par2", "3159", $false)
# my report has only 1 parameter
$params = new-object 'Microsoft.Reporting.WinForms.ReportParameter[]' 1
$params[0] = new-Object Microsoft.Reporting.WinForms.ReportParameter("Par1", "3159", $false)
$rv.ServerReport.SetParameters($params);
$rv.ShowParameterPrompts = $false
$rv.RefreshReport()
#--------------------------------------------------------------
#Show as Dialog Using Windows Form
#--------------------------------------------------------------
#create a new form
$form = New-Object Windows.Forms.Form
#we're going to make it just slightly bigger than
$form.Height = 810
$form.Width= 1210
$form.Controls.Add($rv)
$rv.Show()
$form.ShowDialog()
<#
http://blogs.msdn.com/b/powershell/archive/2008/05/24/wpf-powershell-part-3-handling-events.aspx
http://social.msdn.microsoft.com/Forums/en-US/vsreportcontrols/thread/693694bc-bfbc-4786-98ee-a99826e78739
#>