方法一:
先用报表专家生成水晶报表,再加载:
using CrystalDecisions.Shared; //负责解释TableLogOnInfo类
using CrystalDecisions.CrystalReports.Engine; //负责解释ReportDocument类
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
try
{
CrystalReportViewer1.DataBind();
}
catch(Exception me)
{
Response.Write(me.ToString());
}
}
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
//InitializeComponent后
try{
//通过报表对象绑定(可行,因为可指定logOnInfo)
TableLogOnInfo logOnInfo = new TableLogOnInfo ();
reportDocument1 = new ReportDocument();
reportDocument1.Load(@"c:/inetpub/wwwroot/RS_Web_test/CrystalReport1.rpt");
//@"C:/Program Files/Microsoft Visual Studio .NET 2003/Crystal Reports/Samples/Reports/General Business/CrystalReport1.rpt");
//受密码保护的 Microsoft Access 和 Paradox 等 PC 数据库也使用该方法
//但 LogOnInfo.ServerName和 LogOnInfo.DatabaseName 要保留为空
logOnInfo.ConnectionInfo.ServerName = "";
logOnInfo.ConnectionInfo.DatabaseName = "";
logOnInfo.ConnectionInfo.UserID = "sa";
logOnInfo.ConnectionInfo.Password = "sa";
reportDocument1.Database.Tables[0].ApplyLogOnInfo(logOnInfo);
CrystalReportViewer1.ReportSource = reportDocument1;
}
catch(Exception ee)
{
Response.Write(ee.ToString());
}
base.OnInit(e);
}
方法二:推荐
当然也可把代码全加在Page_load中。
而且,方法一的代码有两个缺点:
(1)数据报表格式文件是采用绝对路径
(2)数据库访问的servername,database,userid,password是写死的,扩展性不好。
Advanced改进:
(1)Server.Mappath函数(相对于c://inetpub//wwwroot的路径)
(2)读取web.config(System.Configuration.ConfigurationSettings.AppSettings ["servername"];)
代码:
using CrystalDecisions.Shared ;//负责解释TableLogOnInfo类
using CrystalDecisions.CrystalReports .Engine ;//负责解释ReportDocument类
private void Page_Load(object sender, System.EventArgs e)
{
TableLogOnInfo logOnInfo = new TableLogOnInfo ();
//这里必须事先申明一个ReportDocument对象 Report,同时加载数据报表
ReportDocument oRpt = new ReportDocument();
//获取.rpt文件真实路径
string path1;
path1=Server.MapPath (''//RS-proj'');
path1+= ''//cr1.rpt'';
//oRpt.Load("c://inetpub//wwwroot//RS-proj//cr1.rpt");
oRpt.Load (path1);
//从web.config中获取logOnInfo参数信息
string a,b,c,d;
//获取ServerName
a=System.Configuration .ConfigurationSettings .AppSettings ["servername"];
//获取DatabaseName
b=System.Configuration .ConfigurationSettings .AppSettings ["database"];
//获取UserId
c=System.Configuration .ConfigurationSettings .AppSettings ["userid"];
//获取password
d=System.Configuration .ConfigurationSettings .AppSettings ["pass"];
//设置logOnInfo参数
logOnInfo.ConnectionInfo.ServerName = a;
logOnInfo.ConnectionInfo.DatabaseName = b;
logOnInfo.ConnectionInfo.UserID = c;
logOnInfo.ConnectionInfo.Password = d;
oRpt.Database .Tables [0].ApplyLogOnInfo (logOnInfo);
//建立.rpt文件与CryStalReportviewer文件之间的连接
CrystalReportViewer1.ReportSource = oRpt;
}
整个演示的操作过程说明:
1、 在解决方案资源管理器里,你需要存放报表文件处,添加新项:CrystalReport报表,起名为cr1.rpt
2、 在随后出现的“报表专家”中选择数据源时,请务必选择OLE DB,然后根据你的数据库的要求选择响应的驱动引擎:
SQL SERVER:Microsoft OLE DB Provider for SQL server
Access:Microsoft Jet.4.0
3、 输入正确的数据库连接,建立数据报表,并保存cr1.rpt文件
4、 打开webform1.aspx。添加crystalreportviewer控件:名称为:CrystalReportViewer1
5、 在webform1.aspx.cs中的page_load事件中添加上面的代码:
下面是web.config中与本内容有关的细节
</system.web>
<appSettings>
<add key="servername" value=""/>
<add key="database" value=""/>
<add key="userid" value="admin"/>
<add key="pass" value="123456"/>
</appSettings>
</configuration>