使用 WinForms ReportViewer 控制項

 

[本主題是發行前的文件集,在未來的版本中可能有所變更。空白的主題則以預留位置表示。請注意:為了提供您更多繁體中文的內容,Microsoft 以非傳統翻譯方式 (例如機器翻譯) 提供當地語系化的文件。針對此發行前版本,本文件中的部分內容就是以非傳統方式翻譯。Microsoft 了解非傳統方式翻譯的文件很難盡善盡美,此類文件或許會有詞彙、結構、文法方面的錯誤。本內容的正式版將會以傳統翻譯方式翻譯,提供與舊版本相等的譯文品質。]

 

 

若要檢視已部署至報表伺服器或存在於本機檔案系統的報表,您可以使用 WinForms ReportViewer 控制項在 Windows 應用程式中加以轉譯。

將 ReportViewer 控制項加入至 Windows 應用程式
  1. 使用 Microsoft Visual C# 或 Microsoft Visual Basic 建立新的 Windows 應用程式。
    - 或 -
    開啟現有的 Windows 應用程式專案並加入的新表單。
  2. 在 [工具箱] 中找出 ReportViewer 控制項。如果看不到 [工具箱],可以從 [檢視] 功能表選取 [工具箱] 加以存取。
  3. 拖曳 ReportViewer 控制項至 Windows Form 的設計介面。
    名為 reportViewer1 的 ReportViewer 控制項會加入至表單。

在控制項加入至表單後,[ReportViewer 工作] 智慧標籤會顯示,並提示您選取報表。如果您想要撿視的報表已經部署到報表伺服器,請從 [選擇報表] 下拉式清單選取 [<伺服器報表>] 選項。 After the <Server Report> option is selected, two additional properties appear: Report Server Url and Report Path.[報表伺服器 Url] 是到報表伺服器的位址,[報表路徑] 則是要轉譯之報表的完整路徑。若要以本機模式檢視報表,請選取 [設計新報表] 選項以啟動報表設計師,或選取已是現有專案一部分的報表。

 

 

下列範例示範如何使用 WinForms ReportViewer 控制項轉譯已部署到報表伺服器的報表。這個範例使用包含在AdventureWorks2008R2 範例報表專案中的 Sales Order Detail 報表。如需有關如何部署這個範例報表的詳細資訊,請參閱<AdventureWorks 報表範例>。

 

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();
    }
}

 

 

 

Visual Basic
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 應用程式的一部分且尚未部署到報表伺服器的報表。這個範例也會使用AdventureWorks 報表範例 專案的 Sales Order Detail 報表。

將 Sales Order Detail 報表加入至 Windows 應用程式
  1. 開啟其中將加入此報表的 Windows 專案。
  2. 從 [專案] 功能表上,選取 [加入現有項目]
  3. 瀏覽到安裝 AdventureWorks2008R2 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 鍵。
    如果看不到方案總管,可以從 [檢視] 功能表選取 [方案總管] 加以開啟。
    Aa337089.note(zh-tw,SQL.105).gif附註:
    將副檔名從 rdl 重新命名為 rdlc 可以讓您使用 Microsoft Visual Studio 的報表設計師編輯報表。

     

     

     

  6. 在報表重新命名後,選取檔案並找出 [屬性] 視窗。將 [複製到輸出目錄] 屬性變更為 [有更新時才複製]
    如果看不到 [屬性] 視窗,可以從 [檢視] 功能表選取 [屬性視窗] 加以開啟。

下列的程式碼範例會為銷售訂單資料建立資料集,然後以本機模式轉譯 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");
        }
    }
}
arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()