次の方法で共有


WinForms ReportViewer コントロールの使用

レポート サーバーに配置されたレポートまたはローカル ファイル システムにあるレポートを表示するには、WinForms ReportViewer コントロールを使用して Windows アプリケーションでレポートを表示します。

Windows アプリケーションに ReportViewer コントロールを追加するには

  1. MicrosoftVisual C# または MicrosoftVisual Basic を使用して、新しい Windows アプリケーションを作成します。

    - または -

    既存の Windows アプリケーション プロジェクトを開いて新しいフォームを追加します。

  2. ツールボックスで ReportViewer コントロールを探します。ツールボックスが表示されていない場合は、[表示] メニューから [ツールボックス] を選択するとアクセスできます。

  3. ReportViewer コントロールを Windows フォームのデザイン画面にドラッグします。

    reportViewer1 という名前の ReportViewer コントロールがフォームに追加されます。

コントロールがフォームに追加されると、[ReportViewer タスク] スマート タグが表示され、レポートの選択を要求します。表示するレポートがレポート サーバーに配置されている場合は、[レポートの選択] ドロップダウン リストから [<Server Report>] を選択します。[<Server Report>] オプションを選択すると、[レポート サーバー URL] および [レポートのパス] という 2 つの追加プロパティが表示されます。[レポート サーバー URL] はレポート サーバーのアドレスで、[レポートのパス] は表示するレポートへの完全なパスです。レポートをローカル モードで表示する場合は、[新しいレポートをデザインします] オプションを選択してレポート デザイナーを起動するか、または既存のプロジェクトに既に含まれているレポートを選択します。

リモート処理モードでのレポートの表示

次の例では、WinForms ReportViewer コントロールを使用して、レポート サーバーに配置されているレポートを表示する方法を示します。この例では、AdventureWorks サンプル レポート プロジェクトに含まれている Sales Order Detail レポートを使用します。このサンプル レポートの配置方法の詳細については、「SQL Server Reporting Services Product Samples」(英語) を参照してください。

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("http:// <Server Name>/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();
    }
}
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("http://<Server Name>/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 = {salesOrderNumber}
        serverReport.SetParameters(parameters)

        'Refresh the report
        reportViewer1.RefreshReport()
    End Sub

End Class

ローカル処理モードでのレポートの表示

次の例では、Windows アプリケーションの一部であり、レポート サーバーに配置されていないレポートの表示方法を示します。この例でも、SQL Server Reporting Services Product Samples プロジェクトの Sales Order Detail レポートを使用します。

Sales Order Detail レポートを Windows アプリケーションに追加するには

  1. レポートを追加する Windows プロジェクトを開きます。

  2. [プロジェクト] メニューの [既存項目の追加] を選択します。

  3. AdventureWorks Report Samples プロジェクトがインストールされている場所を参照します。

    既定の場所は、<drive>:\Program Files\Microsoft SQL Server\100\Samples\Reporting Services\Report Samples\AdventureWorks Sample Reports です。サンプルをインストールする方法の詳細については、「SQL Server のサンプルとサンプル データベースのインストールに関する注意点」を参照してください。

  4. Sales Order Detail.rdl ファイルを選択して [追加] ボタンをクリックします。

    Sales Order Detail.rdl ファイルが、プロジェクトの一部になります。

  5. ソリューション エクスプローラーで Sales Order Detail.rdl ファイルを右クリックし、[名前の変更] を選択します。レポートの名前を Sales Order Detail.rdlc に変更し、Enter キーを押します。

    ソリューション エクスプローラーが表示されていない場合は、[表示] メニューから [ソリューション エクスプローラー] を選択して開くことができます。

    注意注意

    ファイルの拡張子を rdl から rdlc に変更することによって、MicrosoftVisual Studio 2005 のレポート デザイナーでレポートを編集できるようになります。

  6. レポートの名前を変更したら、ファイルを選択して [プロパティ] ウィンドウに置きます。Copy to Output Directory プロパティを Copy if Newer に変更します。

    [プロパティ] ウィンドウが表示されていない場合は、[表示] メニューから [プロパティ ウィンドウ] を選択して開くことができます。

次のコード例では、販売注文データのデータセットが作成され、Sales Order Detail レポートがローカル モードで表示されます。

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");
        }
    }
}
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 = {rpSalesOrderNumber}
        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