10bet网址
MySQL连接器/NET开发指南
相关的文档10bet官方网站 下载本手册

5.13.3显示报表

为了显示报表,我们首先用报表所需的数据填充数据集,然后加载报表并将其绑定到数据集。最后,我们将报告传递给crViewer控件以显示给用户。

在显示报表的项目中需要以下引用:

  • CrystalDecisions.CrystalReports.Engine

  • CrystalDecisions。ReportSource

  • CrystalDecisions。共享

  • CrystalDecisions.Windows.Forms

中所示的代码所保存的数据集创建了报告第5.13.1节,创建数据源,并有一个crViewer控件在您的表单命名myview

c#代码示例

使用CrystalDecisions.CrystalReports.Engine;使用System.Data;使用MySql.Data.MySqlClient;ReportDocument myReport = new ReportDocument();数据集myData = new DataSet();MySql.Data.MySqlClient.MySqlConnection康涅狄格州;MySql.Data.MySqlClient.MySqlCommand cmd;MySql.Data.MySqlClient.MySqlDataAdapter myAdapter;conn = new MySql.Data.MySqlClient.MySqlConnection();cmd = new MySql.Data.MySqlClient.MySqlCommand(); myAdapter = new MySql.Data.MySqlClient.MySqlDataAdapter(); conn.ConnectionString = "server=127.0.0.1;uid=root;" + "pwd=12345;database=test"; try { cmd.CommandText = "SELECT city.name AS cityName, city.population AS CityPopulation, " + "country.name, country.population, country.continent " + "FROM country, city ORDER BY country.continent, country.name"; cmd.Connection = conn; myAdapter.SelectCommand = cmd; myAdapter.Fill(myData); myReport.Load(@".\world_report.rpt"); myReport.SetDataSource(myData); myViewer.ReportSource = myReport; } catch (MySql.Data.MySqlClient.MySqlException ex) { MessageBox.Show(ex.Message, "Report could not be created", MessageBoxButtons.OK, MessageBoxIcon.Error); }

Visual Basic代码示例

导入CrystalDecisions.CrystalReports.Engine导入系统。数据导入MySql.Data.MySqlClient Dim myReport As New ReportDocument Dim myData As New DataSet Dim conn As New MySqlConnection Dim cmd As New MySqlCommand Dim myAdapter As New MySqlDataAdapter conn. connectionstring = _ "server=127.0.0.1;"_ & "uid=root;"_ & "pwd=12345;"_ & "database=test"试试conn.Open() cmd。CommandText = "SELECT city.name AS cityName, city.name . "人口AS城市人口,“_ &”country.name,国家。人口的国家。大洲" _ & "来自国家,城市按国家排序。大陆,国家。name" cmd。Connection = conn myAdapter。SelectCommand = cmd myAdapter.Fill(myData) myReport.Load(".\world_report.rpt") myReport.SetDataSource(myData) myViewer。报告源= myReport捕获ex作为异常MessageBox.Show消息,“报告无法创建”,MessageBoxButtons。OK, MessageBoxIcon.Error)结束尝试

它使用生成先前保存的数据集的相同查询生成的新数据集。填充数据集后,使用ReportDocument加载报告文件并将其绑定到数据集。ReportDocument是作为crViewer的ReportSource传递的。

当使用Connector/ODBC从单个表创建报告时,采用相同的方法。数据集替换报表中使用的表格,报表正常显示。

当使用Connector/ODBC从多个表创建报告时,必须在应用程序中创建包含多个表的数据集。这样就可以将报表数据源中的每个表替换为数据集中的报表。

我们通过提供多个表来填充数据集选择MySqlCommand对象中的语句。这些选择语句是基于水晶报告在数据库菜单的显示SQL查询选项的SQL查询。假设有以下查询:

选择“国家”。“名称”,“国家”。‘大陆’,‘国家’。“人口”、“城市”。“名称”、“城市”。' Population '来自' world '。“国家”“国家”左外连接“世界”。' city ' ' city ' ON ' country ' . ' Code ' = ' city '。“国家代码”按“国家”排序。‘大陆’,‘国家’。“名称”、“城市”。“名字”

这个查询被转换为两个选择查询并显示如下代码:

c#代码示例

使用CrystalDecisions.CrystalReports.Engine;使用System.Data;使用MySql.Data.MySqlClient;ReportDocument myReport = new ReportDocument();数据集myData = new DataSet();MySql.Data.MySqlClient.MySqlConnection康涅狄格州;MySql.Data.MySqlClient.MySqlCommand cmd;MySql.Data.MySqlClient.MySqlDataAdapter myAdapter;conn = new MySql.Data.MySqlClient.MySqlConnection();cmd = new MySql.Data.MySqlClient.MySqlCommand(); myAdapter = new MySql.Data.MySqlClient.MySqlDataAdapter(); conn.ConnectionString = "server=127.0.0.1;uid=root;" + "pwd=12345;database=test"; try { cmd.CommandText = "SELECT name, population, countrycode FROM city ORDER " + "BY countrycode, name; SELECT name, population, code, continent FROM " + "country ORDER BY continent, name"; cmd.Connection = conn; myAdapter.SelectCommand = cmd; myAdapter.Fill(myData); myReport.Load(@".\world_report.rpt"); myReport.Database.Tables(0).SetDataSource(myData.Tables(0)); myReport.Database.Tables(1).SetDataSource(myData.Tables(1)); myViewer.ReportSource = myReport; } catch (MySql.Data.MySqlClient.MySqlException ex) { MessageBox.Show(ex.Message, "Report could not be created", MessageBoxButtons.OK, MessageBoxIcon.Error); }

Visual Basic代码示例

导入CrystalDecisions.CrystalReports.Engine导入系统。数据导入MySql.Data.MySqlClient Dim myReport As New ReportDocument Dim myData As New DataSet Dim conn As New MySqlConnection Dim cmd As New MySqlCommand Dim myAdapter As New MySqlDataAdapter conn. connectionstring = "server=127.0.0.1;"_ & "uid=root;"_ & "pwd=12345;"_ & "database=world"试试conn.Open() cmd。CommandText = "SELECT name, population, countrycode FROM city;" _ & "SELECT name, population, code, continent FROM country ORDER BY continent, name" cmd。Connection = conn myAdapter。SelectCommand = cmd myAdapter.Fill(myData) myReport.Load(".\world_report.rpt") myReport.Database.Tables(0). setdatasource (myData. tables (0)) myReport.Database.Tables(1). setdatasource (myData. tables (1))报告源= myReport捕获ex作为异常MessageBox.Show消息,“报告无法创建”,MessageBoxButtons。OK, MessageBoxIcon.Error)结束尝试

订购是很重要的选择按字母顺序查询,因为这是报表期望其源表的顺序。报告中的每个表都需要一条SetDataSource语句。

这种方法可能会导致性能问题,因为Crystal Reports必须在客户端将表绑定在一起,这比使用预先保存的数据集要慢。