Поддержка версий средства просмотра отчетов Сurrent Branch
Элемент управления Microsoft Report Viewer совместим со службами SQL Server Reporting Services и сервером отчетов Power BI, к которым применяется современная политика жизненного цикла поддержки Майкрософт. Эти сведения относятся как к версиям ASP.NET, так и к версиям WinForms, распространяемым посредством NuGet. Все выпущенные версии доступны через NuGet. Исправления, компоненты и прочие обновления предоставляются для последней версии. Для получения обновлений требуются последние версии. Для средства просмотра отчетов продолжают выпускаться обновления для системы безопасности и критические обновления. Мы уведомляем о любых изменениях в политике поддержки не позднее чем за один год до их внесения.
Журнал версий для элемента управления «Средство просмотра отчетов» доступен по следующим ссылкам:
Сочетание сервера приложений и сервера отчетов
Некоторые функции элемента управления «Средство просмотра отчетов» зависят от поведения операционной системы по умолчанию. Таким образом, им может потребоваться выполнение одной и той же версии для клиента (сервер приложений, на котором выполняется элемент управления «Средство просмотра отчетов») и сервер (запущенные службы Reporting Services). Поддерживаются следующие сочетания сервера приложений и сервера отчетов:
| Сервер приложений | Сервер отчетов |
|---|---|
| Windows Server 2012 | Windows Server 2012 |
| Windows Server 2012 | Windows Server 2012 R2 |
| Windows Server 2012 R2 | Windows Server 2012 R2 |
| Windows Server 2012 R2 | Windows Server 2012 |
| Windows Server 2016 и более поздних версий | Windows Server 2016 и более поздних версий |
Занятие 6. Добавление элемента управления ReportViewer в приложение
После завершения проектирования дочернего отчета с помощью мастера отчетов далее необходимо добавить в приложение веб-сайта элемент управления ReportViewer. Если вы используете веб-сайт отчетов ASP.NET, он добавляет элемент управления ReportViewer на страницу default.aspx.
Добавление элемента управления ReportViewer в приложение
- В Обозреватель решений щелкните правой кнопкой мыши Default.aspx и выберите конструктор представлений.
- Если на странице default.aspx уже есть элемент управления ReportViewer, перейдите к шагу 4. В противном случае из группы Расширения AJAX в окне Панель элементов перетащите элемент управления ScriptManager в область конструктора.
- Из группы Отчетность перетащите элемент управления ReportViewer в область конструктора, расположив его ниже элемента управления ScriptManager .
- Откройте окно задач ReportViewer, выбрав стрелку в правом верхнем углу элемента управления ReportViewer.
- В поле Выбор отчета выберите созданный родительский отчет. После выбора отчета экземпляры источников данных, используемых в отчете, будут созданы автоматически. Будет сформирован код для создания экземпляра каждого объекта DataTable (и его контейнера DataSet ). В область конструктора будут добавлены элементы управления ObjectDataSource , соответствующие каждому источнику данных, который используется в отчете. Настройка этих элементов управления источником данных осуществляется автоматически.
- В меню «Сборка» выберите «Создать веб-сайт». Отчет компилируется, и все ошибки, такие как синтаксические ошибки в выражениях отчета, появляются в области Список ошибок . Выберите список ошибок в нижней части окна Visual Studio, чтобы отобразить область списка ошибок.
Следующий шаг
Вы успешно добавили элемент управления ReportViewer в приложение веб-сайта. Затем вы добавите действие детализации в родительском отчете. См . урок 7. Добавление действия детализации в родительском отчете.
Обратная связь
Были ли сведения на этой странице полезными?
Использование элемента управления WebForms ReportViewer
Для просмотра отчетов, развернутых на сервере отчетов, и отчетов, существующих в локальной файловой системе, можно использовать элемент управления WebForms ReportViewer для подготовки отчетов к просмотру в веб-приложении.
Использование элемента управления ReportViewer в веб-приложении
- Создайте веб-сайт Microsoft ASP.NET с помощью Microsoft C# или Microsoft Visual Basic. -или- Откройте существующий веб-сайт ASP.NET и добавьте новую веб-форму.
- Найдите элемент управления ScriptManager в группе AJAX-расширения в окне Панель элементов и перетащите его в область конструктора веб-формы. Если панель элементов не отображается, вы можете получить доступ к ней из меню «Вид«, выбрав панель элементов.
- Найдите элемент управления ReportViewer в окне Панель элементов и перетащите его в область конструктора под элементом управления ScriptManager. В форму будет добавлен элемент управления ReportViewer с именем reportViewer1.
После добавления элемента управления в форму появится смарт-тег «Задачи ReportViewer» с запросом на выбор отчета. Если отчет, который вы хотите просмотреть, развертывается на сервере отчетов, выберите параметр «Отчет сервера>» в раскрывающемся списке «Выбор отчета«.< После выбора параметра "Отчет> сервера» появится еще два свойства, URL-адрес сервера отчетов и путь к отчету. Свойство URL-адрес сервера отчетов определяет адрес сервера отчетов, а свойство Путь к отчету — полный путь к подлежащему отрисовке отчету.
Если вы хотите просмотреть отчет в локальном режиме, выберите параметр «Конструктор нового отчета», чтобы запустить конструктор отчетов или выбрать отчет, который уже является частью существующего проекта. После выбора отчета обязательно введите имя файла RDLC отчета в свойстве ReportPath элемента управления ReportViewer. Это свойство находится в узле LocalReport в области Свойства.
При подготовке отчета к просмотру есть возможность скрыть один или несколько элементов на панели инструментов ReportViewer. Например, можно скрыть кнопку печати. Для скрытия элементов панели инструментов присвойте значение False указанным ниже свойствам в области Свойства.
Просмотр отчетов в режиме удаленной обработки
В следующем примере показано, как отобразить отчет, развернутый на сервере отчетов. В этом примере используется отчет Sales Order Detail, который включен в проект с образцами отчетов AdventureWorks2022 .
В этом примере используется встроенная проверка подлинности Windows, поэтому сначала необходимо включить олицетворение. Для этого в файл web.config необходимо вставить следующую строку:
По умолчанию олицетворение отключено.
C#
protected void Page_Init(object sender, EventArgs e) < if (!Page.IsPostBack) < // Set the processing mode for the ReportViewer to Remote reportViewer.ProcessingMode = ProcessingMode.Remote; ServerReport serverReport = reportViewer.ServerReport; // Set the report server URL and report path serverReport.ReportServerUrl = new Uri("https:///reportserver"); serverReport.ReportPath = "/AdventureWorks Sample Reports/Sales Order Detail"; // Create the sales order number report parameter ReportParameter salesOrderNumber = new ReportParameter(); salesOrderNumber.Name = "SalesOrderNumber"; salesOrderNumber.Values.Add("SO43661"); // Set the report parameters for the report reportViewer.ServerReport.SetParameters( new ReportParameter[] < salesOrderNumber >); > >
VB.NET
Imports Microsoft.Reporting.WebForms Partial Class _Default Inherits System.Web.UI.Page Protected Sub Page_Init(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Init If Not Page.IsPostBack Then 'Set the processing mode for the ReportViewer to Remote reportViewer.ProcessingMode = ProcessingMode.Remote Dim serverReport As ServerReport serverReport = reportViewer.ServerReport 'Set the report server URL and report path serverReport.ReportServerUrl = _ New Uri("https:///reportserver") serverReport.ReportPath = _ "/AdventureWorks Sample Reports/Sales Order Detail" 'Create the sales order number report parameter Dim salesOrderNumber As New ReportParameter() salesOrderNumber.Name = "SalesOrderNumber" salesOrderNumber.Values.Add("SO43661") 'Set the report parameters for the report Dim parameters() As ReportParameter = serverReport.SetParameters(parameters) End If End Sub End Class
Просмотр отчетов в локальном режиме обработки
В следующем примере показано, как отобразить отчет, который является частью приложения Windows и не развертывается на сервере отчетов.
Добавление отчета «Сведения о заказе на продажу» на веб-сайт
- Откройте веб-сайт, на который должен быть добавлен отчет.
- В меню Веб-сайт выберите пункт Добавить существующий элемент.
- Перейдите в папку, в которой были установлены проекты образцов отчетов AdventureWorks. Ее местонахождением по умолчанию является C:\Program Files\Microsoft SQL Server\100\Samples\Reporting Services\Report Samples\AdventureWorks Sample Reports.
- Выберите файл Detail.rdl заказа на продажу и нажмите кнопку «Добавить «. Файл «Сведения о заказе на продажу.rdl» теперь станет частью проекта.
- Щелкните правой кнопкой мыши файл Sales Order Detail.rdl в обозревателе решений и выберите команду Переименовать. Переименуйте отчет в Сведения о заказах на продажу.rdlc и нажмите клавишу ВВОД. Если Обозреватель решений не отображается, его можно открыть в меню «Вид«, выбрав Обозреватель решений.
В следующем примере кода создается набор данных для данных заказа на продажу, а затем отображается отчет «Сведения о заказах на продажу» в локальном режиме.
C#
protected void Page_Init(object sender, EventArgs e) < if (!Page.IsPostBack) < // Set the processing mode for the ReportViewer to Local reportViewer.ProcessingMode = ProcessingMode.Local; LocalReport localReport = reportViewer.LocalReport; localReport.ReportPath = "Sales Order Detail.rdlc"; DataSet dataset = new DataSet("Sales Order Detail"); string salesOrderNumber = "SO43661"; GetSalesOrderData(salesOrderNumber, ref dataset); ReportDataSource dsSalesOrder = new ReportDataSource(); dsSalesOrder.Name = "SalesOrder"; dsSalesOrder.Value = dataset.Tables["SalesOrder"]; localReport.DataSources.Add(dsSalesOrder); GetSalesOrderDetailData(salesOrderNumber, ref dataset); ReportDataSource dsSalesOrderDetail = new ReportDataSource(); dsSalesOrderDetail.Name = "SalesOrderDetail"; dsSalesOrderDetail.Value = dataset.Tables["SalesOrderDetail"]; localReport.DataSources.Add(dsSalesOrderDetail); // Create the sales order number report parameter ReportParameter rpSalesOrderNumber = new ReportParameter(); rpSalesOrderNumber.Name = "SalesOrderNumber"; rpSalesOrderNumber.Values.Add("SO43661"); // Set the report parameters for the report localReport.SetParameters( new ReportParameter[] < rpSalesOrderNumber >); > > private void GetSalesOrderData(string salesOrderNumber, ref DataSet dsSalesOrder) < string sqlSalesOrder = "SELECT SOH.SalesOrderNumber, S.Name AS Store, " + " SOH.OrderDate, C.FirstName AS SalesFirstName, " + " C.LastName AS SalesLastName, E.Title AS " + " SalesTitle, SOH.PurchaseOrderNumber, " + " SM.Name AS ShipMethod, BA.AddressLine1 " + " AS BillAddress1, BA.AddressLine2 AS " + " BillAddress2, BA.City AS BillCity, " + " BA.PostalCode AS BillPostalCode, BSP.Name " + " AS BillStateProvince, BCR.Name AS " + " BillCountryRegion, SA.AddressLine1 AS " + " ShipAddress1, SA.AddressLine2 AS " + " ShipAddress2, SA.City AS ShipCity, " + " SA.PostalCode AS ShipPostalCode, SSP.Name " + " AS ShipStateProvince, SCR.Name AS " + " ShipCountryRegion, CC.Phone AS CustPhone, " + " CC.FirstName AS CustFirstName, CC.LastName " + " AS CustLastName " + "FROM Person.Address SA INNER JOIN " + " Person.StateProvince SSP ON " + " SA.StateProvinceID = SSP.StateProvinceID " + " INNER JOIN Person.CountryRegion SCR ON " + " SSP.CountryRegionCode = SCR.CountryRegionCode " + " RIGHT OUTER JOIN Sales.SalesOrderHeader SOH " + " LEFT OUTER JOIN Person.Contact CC ON " + " SOH.ContactID = CC.ContactID LEFT OUTER JOIN" + " Person.Address BA INNER JOIN " + " Person.StateProvince BSP ON " + " BA.StateProvinceID = BSP.StateProvinceID " + " INNER JOIN Person.CountryRegion BCR ON " + " BSP.CountryRegionCode = " + " BCR.CountryRegionCode ON SOH.BillToAddressID " + " = BA.AddressID ON SA.AddressID = " + " SOH.ShipToAddressID LEFT OUTER JOIN " + " Person.Contact C RIGHT OUTER JOIN " + " HumanResources.Employee E ON C.ContactID = " + " E.ContactID ON SOH.SalesPersonID = " + " E.EmployeeID LEFT OUTER JOIN " + " Purchasing.ShipMethod SM ON SOH.ShipMethodID " + " = SM.ShipMethodID LEFT OUTER JOIN Sales.Store" + " S ON SOH.CustomerID = S.CustomerID " + "WHERE (SOH.SalesOrderNumber = @SalesOrderNumber)"; SqlConnection connection = new SqlConnection("Data Source=(local); " + "Initial Catalog=AdventureWorks; " + "Integrated Security=SSPI"); SqlCommand command = new SqlCommand(sqlSalesOrder, connection); command.Parameters.Add( new SqlParameter("SalesOrderNumber", salesOrderNumber)); SqlDataAdapter salesOrderAdapter = new SqlDataAdapter(command); salesOrderAdapter.Fill(dsSalesOrder, "SalesOrder"); >private void GetSalesOrderDetailData(string salesOrderNumber, ref DataSet dsSalesOrder) < string sqlSalesOrderDetail = "SELECT SOD.SalesOrderDetailID, SOD.OrderQty, " + " SOD.UnitPrice, CASE WHEN " + " SOD.UnitPriceDiscount IS NULL THEN 0 " + " ELSE SOD.UnitPriceDiscount END AS " + " UnitPriceDiscount, SOD.LineTotal, " + " SOD.CarrierTrackingNumber, " + " SOD.SalesOrderID, P.Name, P.ProductNumber " + "FROM Sales.SalesOrderDetail SOD INNER JOIN " + " Production.Product P ON SOD.ProductID = " + " P.ProductID INNER JOIN " + " Sales.SalesOrderHeader SOH ON " + " SOD.SalesOrderID = SOH.SalesOrderID " + "WHERE (SOH.SalesOrderNumber = @SalesOrderNumber) " + "ORDER BY SOD.SalesOrderDetailID"; using (SqlConnection connection = new SqlConnection("Data Source=(local); " + "Initial Catalog=AdventureWorks; " + "Integrated Security=SSPI")) < SqlCommand command = new SqlCommand(sqlSalesOrderDetail, connection); command.Parameters.Add( new SqlParameter("SalesOrderNumber", salesOrderNumber)); SqlDataAdapter salesOrderDetailAdapter = new SqlDataAdapter(command); salesOrderDetailAdapter.Fill(dsSalesOrder, "SalesOrderDetail"); >>
VB.NET
Imports System.Data Imports System.Data.SqlClient Imports Microsoft.Reporting.WebForms Partial Class _Default Inherits System.Web.UI.Page Protected Sub Page_Init(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Init If Not Page.IsPostBack Then 'Set the processing mode for the ReportViewer to Local reportViewer.ProcessingMode = ProcessingMode.Local Dim localReport As LocalReport localReport = reportViewer.LocalReport localReport.ReportPath = "Sales Order Detail.rdlc" Dim dataset As New DataSet("Sales Order Detail") Dim salesOrderNumber As String = "SO43661" 'Get the sales order data GetSalesOrderData(salesOrderNumber, dataset) 'Create a report data source for the sales order data Dim dsSalesOrder As New ReportDataSource() dsSalesOrder.Name = "SalesOrder" dsSalesOrder.Value = dataset.Tables("SalesOrder") localReport.DataSources.Add(dsSalesOrder) 'Get the sales order detail data GetSalesOrderDetailData(salesOrderNumber, dataset) 'Create a report data source for the sales 'order detail data Dim dsSalesOrderDetail As New ReportDataSource() dsSalesOrderDetail.Name = "SalesOrderDetail" dsSalesOrderDetail.Value = _ dataset.Tables("SalesOrderDetail") localReport.DataSources.Add(dsSalesOrderDetail) 'Create a report parameter for the sales order number Dim rpSalesOrderNumber As New ReportParameter() rpSalesOrderNumber.Name = "SalesOrderNumber" rpSalesOrderNumber.Values.Add("SO43661") 'Set the report parameters for the report Dim parameters() As ReportParameter = localReport.SetParameters(parameters) End If End Sub Private Sub GetSalesOrderData(ByVal salesOrderNumber As String, _ ByRef dsSalesOrder As DataSet) Dim sqlSalesOrder As String = _ "SELECT SOH.SalesOrderNumber, S.Name AS Store, " & _ " SOH.OrderDate, C.FirstName AS SalesFirstName, " & _ " C.LastName AS SalesLastName, E.Title AS " & _ " SalesTitle, SOH.PurchaseOrderNumber, " & _ " SM.Name AS ShipMethod, BA.AddressLine1 " & _ " AS BillAddress1, BA.AddressLine2 AS " & _ " BillAddress2, BA.City AS BillCity, " & _ " BA.PostalCode AS BillPostalCode, BSP.Name " & _ " AS BillStateProvince, BCR.Name AS " & _ " BillCountryRegion, SA.AddressLine1 AS " & _ " ShipAddress1, SA.AddressLine2 AS " & _ " ShipAddress2, SA.City AS ShipCity, " & _ " SA.PostalCode AS ShipPostalCode, SSP.Name " & _ " AS ShipStateProvince, SCR.Name AS " & _ " ShipCountryRegion, CC.Phone AS CustPhone, " & _ " CC.FirstName AS CustFirstName, CC.LastName " & _ " AS CustLastName " & _ "FROM Person.Address SA INNER JOIN " & _ " Person.StateProvince SSP ON " & _ " SA.StateProvinceID = SSP.StateProvinceID " & _ " INNER JOIN Person.CountryRegion SCR ON " & _ " SSP.CountryRegionCode = SCR.CountryRegionCode " & _ " RIGHT OUTER JOIN Sales.SalesOrderHeader SOH " & _ " LEFT OUTER JOIN Person.Contact CC ON " & _ " SOH.ContactID = CC.ContactID LEFT OUTER JOIN" & _ " Person.Address BA INNER JOIN " & _ " Person.StateProvince BSP ON " & _ " BA.StateProvinceID = BSP.StateProvinceID " & _ " INNER JOIN Person.CountryRegion BCR ON " & _ " BSP.CountryRegionCode = " & _ " BCR.CountryRegionCode ON SOH.BillToAddressID " & _ " = BA.AddressID ON SA.AddressID = " & _ " SOH.ShipToAddressID LEFT OUTER JOIN " & _ " Person.Contact C RIGHT OUTER JOIN " & _ " HumanResources.Employee E ON C.ContactID = " & _ " E.ContactID ON SOH.SalesPersonID = " & _ " E.EmployeeID LEFT OUTER JOIN " & _ " Purchasing.ShipMethod SM ON SOH.ShipMethodID " & _ " = SM.ShipMethodID LEFT OUTER JOIN Sales.Store" & _ " S ON SOH.CustomerID = S.CustomerID " & _ "WHERE (SOH.SalesOrderNumber = @SalesOrderNumber)" Using connection As New SqlConnection( _ "Data Source=(local); " & _ "Initial Catalog=AdventureWorks; " & _ "Integrated Security=SSPI") Dim command As New SqlCommand(sqlSalesOrder, connection) Dim parameter As New SqlParameter("SalesOrderNumber", _ salesOrderNumber) command.Parameters.Add(parameter) Dim salesOrderAdapter As New SqlDataAdapter(command) salesOrderAdapter.Fill(dsSalesOrder, "SalesOrder") End Using End Sub Private Sub GetSalesOrderDetailData( _ ByVal salesOrderNumber As String, _ ByRef dsSalesOrder As DataSet) Dim sqlSalesOrderDetail As String = _ "SELECT SOD.SalesOrderDetailID, SOD.OrderQty, " & _ " SOD.UnitPrice, CASE WHEN " & _ " SOD.UnitPriceDiscount IS NULL THEN 0 " & _ " ELSE SOD.UnitPriceDiscount END AS " & _ " UnitPriceDiscount, SOD.LineTotal, " & _ " SOD.CarrierTrackingNumber, " & _ " SOD.SalesOrderID, P.Name, P.ProductNumber " & _ "FROM Sales.SalesOrderDetail SOD INNER JOIN " & _ " Production.Product P ON SOD.ProductID = " & _ " P.ProductID INNER JOIN " & _ " Sales.SalesOrderHeader SOH ON " & _ " SOD.SalesOrderID = SOH.SalesOrderID " & _ "WHERE (SOH.SalesOrderNumber = @SalesOrderNumber) " & _ "ORDER BY SOD.SalesOrderDetailID" Using connection As New SqlConnection( _ "Data Source=(local); " & _ "Initial Catalog=AdventureWorks; " & _ "Integrated Security=SSPI") Dim command As New SqlCommand(sqlSalesOrderDetail, _ connection) Dim parameter As New SqlParameter("SalesOrderNumber", _ salesOrderNumber) command.Parameters.Add(parameter) Dim salesOrderDetailAdapter As New SqlDataAdapter(command) salesOrderDetailAdapter.Fill(dsSalesOrder, _ "SalesOrderDetail") End Using End Sub End Class
Использование элемента управления WinForms ReportViewer
Чтобы просмотреть отчеты, развернутые на сервере отчетов или отчетах, которые существуют в локальной файловой системе, используйте элемент управления WinForms ReportViewer, чтобы отобразить их в приложении Windows.
Добавление элемента управления ReportViewer в приложение Windows

- Создайте новое приложение Windows с помощью Microsoft C# или Microsoft Visual Basic. -или- Открыть существующий проект приложения Windows и добавить новую форму.
- Укажите элемент управления ReportViewer в окне Панель элементов. Если панель элементов не отображается, вы можете получить доступ к ней из меню «Вид«, выбрав панель элементов.
- Перетащите элемент управления ReportViewer в область конструктора Windows Form. В форму будет добавлен элемент управления ReportViewer с именем reportViewer1.
После добавления элемента управления в форму появляется смарт-тег Задачи ReportViewer и выводится приглашение выбрать отчет.
Если отчет, который вы хотите просмотреть, развертывается на сервере отчетов, выберите параметр «Отчет сервера>» в раскрывающемся списке «Выбор отчета«.< После выбора параметра "Отчет> сервера» появится еще два свойства: URL-адрес сервера отчетов и путь к отчету.< Свойство URL-адрес сервера отчетов задает адрес сервера отчетов, а свойство Путь к отчету задает полный путь к подготавливаемому к просмотру отчету.

Если просматриваемый отчет является отчетом в локальном режиме, выберите параметр Создать новый отчет для запуска конструктора отчетов или отчет, который уже является частью существующего проекта.

Просмотр отчетов в режиме удаленной обработки
В следующем примере показано, как отобразить отчет, развернутый на сервере отчетов с помощью элемента управления WinForms ReportViewer. В этом примере используется отчет Sales Order Detail, который включен в проект с образцами отчетов AdventureWorks2022 .
C#
public partial class Form1 : Form < private void Form1_Load(object sender, EventArgs e) < // Set the processing mode for the ReportViewer to Remote reportViewer1.ProcessingMode = ProcessingMode.Remote; ServerReport serverReport = reportViewer1.ServerReport; // Get a reference to the default credentials System.Net.ICredentials credentials = System.Net.CredentialCache.DefaultCredentials; // Get a reference to the report server credentials ReportServerCredentials rsCredentials = serverReport.ReportServerCredentials; // Set the credentials for the server report rsCredentials.NetworkCredentials = credentials; // Set the report server URL and report path serverReport.ReportServerUrl = new Uri("https:// /reportserver"); serverReport.ReportPath = "/AdventureWorks Sample Reports/Sales Order Detail"; // Create the sales order number report parameter ReportParameter salesOrderNumber = new ReportParameter(); salesOrderNumber.Name = "SalesOrderNumber"; salesOrderNumber.Values.Add("SO43661"); // Set the report parameters for the report reportViewer1.ServerReport.SetParameters( new ReportParameter[] < salesOrderNumber >); // Refresh the report reportViewer1.RefreshReport(); > >
VB.NET
Imports Microsoft.Reporting.WinForms Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles MyBase.Load 'Set the processing mode for the ReportViewer to Remote reportViewer1.ProcessingMode = ProcessingMode.Remote Dim serverReport As ServerReport serverReport = reportViewer1.ServerReport 'Get a reference to the default credentials Dim credentials As System.Net.ICredentials credentials = System.Net.CredentialCache.DefaultCredentials 'Get a reference to the report server credentials Dim rsCredentials As ReportServerCredentials rsCredentials = serverReport.ReportServerCredentials 'Set the credentials for the server report rsCredentials.NetworkCredentials = credentials 'Set the report server URL and report path serverReport.ReportServerUrl = _ New Uri("https:///reportserver") serverReport.ReportPath = _ "/AdventureWorks Sample Reports/Sales Order Detail" 'Create the sales order number report parameter Dim salesOrderNumber As New ReportParameter() salesOrderNumber.Name = "SalesOrderNumber" salesOrderNumber.Values.Add("SO43661") 'Set the report parameters for the report Dim parameters() As ReportParameter = serverReport.SetParameters(parameters) 'Refresh the report reportViewer1.RefreshReport() End Sub End Class
Просмотр отчетов в локальном режиме обработки
В следующем примере показано, как отобразить отчет, который является частью приложения Windows и не развертывается на сервере отчетов.
Добавление отчета «Сведения о заказе на продажу» в приложение Windows

- Открыть проект Windows, в который будет добавлен отчет.
- В меню Проект выберите пункт Добавить существующий элемент.
- Перейти в папку, в которой были установлены проекты образцов отчетов AdventureWorks2022 . Скачивание примеров отчета перейдите в примеры отчетов AdventureWorks
- Выберите файл Detail.rdl заказа на продажу и нажмите кнопку «Добавить «. Файл «Сведения о заказе на продажу.rdl» теперь станет частью проекта.
- Щелкните правой кнопкой мыши файл Sales Order Detail.rdl в обозревателе решений и выберите команду Переименовать. Переименуйте отчет в Сведения о заказах на продажу.rdlc и нажмите клавишу ВВОД. Если Обозреватель решений не отображается, его можно открыть в меню «Вид«, выбрав Обозреватель решений.
Примечание. Переименование расширения файла из RDL в RDLC позволит редактировать отчет с помощью конструктора отчетов для Microsoft Visual Studio 2005.

В следующем примере кода создается набор данных для данных заказа на продажу, а затем отображается отчет «Сведения о заказах на продажу» в локальном режиме.
C#
public partial class Form1 : Form < private void Form1_Load(object sender, EventArgs e) < // Set the processing mode for the ReportViewer to Local reportViewer1.ProcessingMode = ProcessingMode.Local; LocalReport localReport = reportViewer1.LocalReport; localReport.ReportPath = "Sales Order Detail.rdlc"; DataSet dataset = new DataSet("Sales Order Detail"); string salesOrderNumber = "SO43661"; // Get the sales order data GetSalesOrderData(salesOrderNumber, ref dataset); // Create a report data source for the sales order data ReportDataSource dsSalesOrder = new ReportDataSource(); dsSalesOrder.Name = "SalesOrder"; dsSalesOrder.Value = dataset.Tables["SalesOrder"]; localReport.DataSources.Add(dsSalesOrder); // Get the sales order detail data GetSalesOrderDetailData(salesOrderNumber, ref dataset); // Create a report data source for the sales order detail // data ReportDataSource dsSalesOrderDetail = new ReportDataSource(); dsSalesOrderDetail.Name = "SalesOrderDetail"; dsSalesOrderDetail.Value = dataset.Tables["SalesOrderDetail"]; localReport.DataSources.Add(dsSalesOrderDetail); // Create a report parameter for the sales order number ReportParameter rpSalesOrderNumber = new ReportParameter(); rpSalesOrderNumber.Name = "SalesOrderNumber"; rpSalesOrderNumber.Values.Add("SO43661"); // Set the report parameters for the report localReport.SetParameters( new ReportParameter[] < rpSalesOrderNumber >); // Refresh the report reportViewer1.RefreshReport(); > private void GetSalesOrderData(string salesOrderNumber, ref DataSet dsSalesOrder) < string sqlSalesOrder = "SELECT SOH.SalesOrderNumber, S.Name AS Store, " + " SOH.OrderDate, C.FirstName AS SalesFirstName, " + " C.LastName AS SalesLastName, E.Title AS " + " SalesTitle, SOH.PurchaseOrderNumber, " + " SM.Name AS ShipMethod, BA.AddressLine1 " + " AS BillAddress1, BA.AddressLine2 AS " + " BillAddress2, BA.City AS BillCity, " + " BA.PostalCode AS BillPostalCode, BSP.Name " + " AS BillStateProvince, BCR.Name AS " + " BillCountryRegion, SA.AddressLine1 AS " + " ShipAddress1, SA.AddressLine2 AS " + " ShipAddress2, SA.City AS ShipCity, " + " SA.PostalCode AS ShipPostalCode, SSP.Name " + " AS ShipStateProvince, SCR.Name AS " + " ShipCountryRegion, CC.Phone AS CustPhone, " + " CC.FirstName AS CustFirstName, CC.LastName " + " AS CustLastName " + "FROM Person.Address SA INNER JOIN " + " Person.StateProvince SSP ON " + " SA.StateProvinceID = SSP.StateProvinceID " + " INNER JOIN Person.CountryRegion SCR ON " + " SSP.CountryRegionCode = SCR.CountryRegionCode " + " RIGHT OUTER JOIN Sales.SalesOrderHeader SOH " + " LEFT OUTER JOIN Person.Contact CC ON " + " SOH.ContactID = CC.ContactID LEFT OUTER JOIN" + " Person.Address BA INNER JOIN " + " Person.StateProvince BSP ON " + " BA.StateProvinceID = BSP.StateProvinceID " + " INNER JOIN Person.CountryRegion BCR ON " + " BSP.CountryRegionCode = " + " BCR.CountryRegionCode ON SOH.BillToAddressID " + " = BA.AddressID ON SA.AddressID = " + " SOH.ShipToAddressID LEFT OUTER JOIN " + " Person.Contact C RIGHT OUTER JOIN " + " HumanResources.Employee E ON C.ContactID = " + " E.ContactID ON SOH.SalesPersonID = " + " E.EmployeeID LEFT OUTER JOIN " + " Purchasing.ShipMethod SM ON SOH.ShipMethodID " + " = SM.ShipMethodID LEFT OUTER JOIN Sales.Store" + " S ON SOH.CustomerID = S.CustomerID " + "WHERE (SOH.SalesOrderNumber = @SalesOrderNumber)"; SqlConnection connection = new SqlConnection("Data Source=(local); " + "Initial Catalog=AdventureWorks; " + "Integrated Security=SSPI"); SqlCommand command = new SqlCommand(sqlSalesOrder, connection); command.Parameters.Add( new SqlParameter("SalesOrderNumber", salesOrderNumber)); SqlDataAdapter salesOrderAdapter = new SqlDataAdapter(command); salesOrderAdapter.Fill(dsSalesOrder, "SalesOrder"); >private void GetSalesOrderDetailData(string salesOrderNumber, ref DataSet dsSalesOrder) < string sqlSalesOrderDetail = "SELECT SOD.SalesOrderDetailID, SOD.OrderQty, " + " SOD.UnitPrice, CASE WHEN " + " SOD.UnitPriceDiscount IS NULL THEN 0 " + " ELSE SOD.UnitPriceDiscount END AS " + " UnitPriceDiscount, SOD.LineTotal, " + " SOD.CarrierTrackingNumber, " + " SOD.SalesOrderID, P.Name, P.ProductNumber " + "FROM Sales.SalesOrderDetail SOD INNER JOIN " + " Production.Product P ON SOD.ProductID = " + " P.ProductID INNER JOIN " + " Sales.SalesOrderHeader SOH ON " + " SOD.SalesOrderID = SOH.SalesOrderID " + "WHERE (SOH.SalesOrderNumber = @SalesOrderNumber) " + "ORDER BY SOD.SalesOrderDetailID"; using (SqlConnection connection = new SqlConnection("Data Source=(local); " + "Initial Catalog=AdventureWorks; " + "Integrated Security=SSPI")) < SqlCommand command = new SqlCommand(sqlSalesOrderDetail, connection); command.Parameters.Add( new SqlParameter("SalesOrderNumber", salesOrderNumber)); SqlDataAdapter salesOrderDetailAdapter = new SqlDataAdapter(command); salesOrderDetailAdapter.Fill(dsSalesOrder, "SalesOrderDetail"); >> >
VB.NET
Imports System.Data.SqlClient Imports Microsoft.Reporting.WinForms Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles MyBase.Load 'Set the processing mode for the ReportViewer to Local reportViewer1.ProcessingMode = ProcessingMode.Local Dim localReport As LocalReport localReport = reportViewer1.LocalReport localReport.ReportEmbeddedResource = _ "ReportViewerIntro.Sales Order Detail.rdlc" Dim dataset As New DataSet("Sales Order Detail") Dim salesOrderNumber As String = "SO43661" 'Get the sales order data GetSalesOrderData(salesOrderNumber, dataset) 'Create a report data source for the sales order data Dim dsSalesOrder As New ReportDataSource() dsSalesOrder.Name = "SalesOrder" dsSalesOrder.Value = dataset.Tables("SalesOrder") localReport.DataSources.Add(dsSalesOrder) 'Get the sales order detail data GetSalesOrderDetailData(salesOrderNumber, dataset) 'Create a report data source for the sales 'order detail data Dim dsSalesOrderDetail As New ReportDataSource() dsSalesOrderDetail.Name = "SalesOrderDetail" dsSalesOrderDetail.Value = _ dataset.Tables("SalesOrderDetail") localReport.DataSources.Add(dsSalesOrderDetail) 'Create a report parameter for the sales order number Dim rpSalesOrderNumber As New ReportParameter() rpSalesOrderNumber.Name = "SalesOrderNumber" rpSalesOrderNumber.Values.Add("SO43661") 'Set the report parameters for the report Dim parameters() As ReportParameter = localReport.SetParameters(parameters) 'Refresh the report reportViewer1.RefreshReport() End Sub Private Sub GetSalesOrderData(ByVal salesOrderNumber As String, _ ByRef dsSalesOrder As DataSet) Dim sqlSalesOrder As String = _ "SELECT SOH.SalesOrderNumber, S.Name AS Store, " & _ " SOH.OrderDate, C.FirstName AS SalesFirstName, " & _ " C.LastName AS SalesLastName, E.Title AS " & _ " SalesTitle, SOH.PurchaseOrderNumber, " & _ " SM.Name AS ShipMethod, BA.AddressLine1 " & _ " AS BillAddress1, BA.AddressLine2 AS " & _ " BillAddress2, BA.City AS BillCity, " & _ " BA.PostalCode AS BillPostalCode, BSP.Name " & _ " AS BillStateProvince, BCR.Name AS " & _ " BillCountryRegion, SA.AddressLine1 AS " & _ " ShipAddress1, SA.AddressLine2 AS " & _ " ShipAddress2, SA.City AS ShipCity, " & _ " SA.PostalCode AS ShipPostalCode, SSP.Name " & _ " AS ShipStateProvince, SCR.Name AS " & _ " ShipCountryRegion, CC.Phone AS CustPhone, " & _ " CC.FirstName AS CustFirstName, CC.LastName " & _ " AS CustLastName " & _ "FROM Person.Address SA INNER JOIN " & _ " Person.StateProvince SSP ON " & _ " SA.StateProvinceID = SSP.StateProvinceID " & _ " INNER JOIN Person.CountryRegion SCR ON " & _ " SSP.CountryRegionCode = SCR.CountryRegionCode " & _ " RIGHT OUTER JOIN Sales.SalesOrderHeader SOH " & _ " LEFT OUTER JOIN Person.Contact CC ON " & _ " SOH.ContactID = CC.ContactID LEFT OUTER JOIN" & _ " Person.Address BA INNER JOIN " & _ " Person.StateProvince BSP ON " & _ " BA.StateProvinceID = BSP.StateProvinceID " & _ " INNER JOIN Person.CountryRegion BCR ON " & _ " BSP.CountryRegionCode = " & _ " BCR.CountryRegionCode ON SOH.BillToAddressID " & _ " = BA.AddressID ON SA.AddressID = " & _ " SOH.ShipToAddressID LEFT OUTER JOIN " & _ " Person.Contact C RIGHT OUTER JOIN " & _ " HumanResources.Employee E ON C.ContactID = " & _ " E.ContactID ON SOH.SalesPersonID = " & _ " E.EmployeeID LEFT OUTER JOIN " & _ " Purchasing.ShipMethod SM ON SOH.ShipMethodID " & _ " = SM.ShipMethodID LEFT OUTER JOIN Sales.Store" & _ " S ON SOH.CustomerID = S.CustomerID " & _ "WHERE (SOH.SalesOrderNumber = @SalesOrderNumber)" Using connection As New SqlConnection( _ "Data Source=(local); " & _ "Initial Catalog=AdventureWorks; " & _ "Integrated Security=SSPI") Dim command As New SqlCommand(sqlSalesOrder, connection) Dim parameter As New SqlParameter("SalesOrderNumber", _ salesOrderNumber) command.Parameters.Add(parameter) Dim salesOrderAdapter As New SqlDataAdapter(command) salesOrderAdapter.Fill(dsSalesOrder, "SalesOrder") End Using End Sub Private Sub GetSalesOrderDetailData( _ ByVal salesOrderNumber As String, _ ByRef dsSalesOrder As DataSet) Dim sqlSalesOrderDetail As String = _ "SELECT SOD.SalesOrderDetailID, SOD.OrderQty, " & _ " SOD.UnitPrice, CASE WHEN " & _ " SOD.UnitPriceDiscount IS NULL THEN 0 " & _ " ELSE SOD.UnitPriceDiscount END AS " & _ " UnitPriceDiscount, SOD.LineTotal, " & _ " SOD.CarrierTrackingNumber, " & _ " SOD.SalesOrderID, P.Name, P.ProductNumber " & _ "FROM Sales.SalesOrderDetail SOD INNER JOIN " & _ " Production.Product P ON SOD.ProductID = " & _ " P.ProductID INNER JOIN " & _ " Sales.SalesOrderHeader SOH ON " & _ " SOD.SalesOrderID = SOH.SalesOrderID " & _ "WHERE (SOH.SalesOrderNumber = @SalesOrderNumber) " & _ "ORDER BY SOD.SalesOrderDetailID" Using connection As New SqlConnection( _ "Data Source=(local); " & _ "Initial Catalog=AdventureWorks; " & _ "Integrated Security=SSPI") Dim command As New SqlCommand(sqlSalesOrderDetail, _ connection) Dim parameter As New SqlParameter("SalesOrderNumber", _ salesOrderNumber) command.Parameters.Add(parameter) Dim salesOrderDetailAdapter As New SqlDataAdapter(command) salesOrderDetailAdapter.Fill(dsSalesOrder, _ "SalesOrderDetail") End Using End Sub End Class