水晶报表有pull及push两种模式,本文采用web工程中的push模式;
报表模拟产品定单,涉及到Product,ProductOrder,Client三张表。
1.创建一个设计时的dataset,在Database Expert中建立表之前的链接关系,如下图:
2.创建一个.rpt文件并指向我们前面创建的dataset,名为PullCrystalReport3.rpt 如下图:
3.在.aspx页面上放置Crystal Report Viewer控件
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Pull3.aspx.cs" Inherits="Pull3" %> <%@ Register Assembly="CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" Namespace="CrystalDecisions.Web" TagPrefix="CR" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true" /> </div> </form> </body> </html>
4.在code behind page中,加入如下代码:
DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(); string connectionStr = "Data Source=.;Initial Catalog=CrystalReport;Persist Security Info=True;User ID=sa;Password=111"; SqlConnection connection = new SqlConnection(connectionStr); //设置数据源 da = new SqlDataAdapter("select * from Client", connection); da.Fill(ds, "Client"); da = new SqlDataAdapter("select * from Product", connection); da.Fill(ds, "Product"); da = new SqlDataAdapter("select * from ProductOrder", connection); da.Fill(ds, "ProductOrder"); //设置报表文档 string reportPath = Server.MapPath("~/PullCrystalReport3.rpt"); ReportDocument rpt = new ReportDocument(); rpt.Load(reportPath); rpt.SetDataSource(ds); //为CrystalReportViewer指定数据源 CrystalReportViewer1.ReportSource = rpt;
5.最终效果如下: