您的位置:首页 > 编程语言 > ASP

asp.net水晶报表的一些问题

2007-09-13 18:23 369 查看
1。第一步是添加新项CrystalReport1

2。在CrystalReport1.rpt面页右键选择:”数据库”à”添加/删除数据库”出现下面对话框:

然后点开OLE DB(ADO)的加号,将弹出选择数据库的对话框

其中”项目数据”里面的”当前连接”显示的就是OLE DB(ADO)的连接,这样就可以将表添加到右边的”选定的表”中了(切记:不要既从”OLE DB” 中选表或命令又从”当前连接”中选,如果你用了数据集,也是一样的道理,否则全提示出”登陆失败”的错误!)

3。字段资料管理器里面”数据库字段”里把字段直接拖到CrystalReport.rpt里面了.布置好布局.

4。回到WebForm1.aspx页面,选择控件CrystalReportViewer将其放到页面上。

5。代码

using CrystalDecisions.Shared;

using CrystalDecisions.CrystalReports.Engine;

在WebForm1.aspx.cs的Form_Load里面添加代码:

TableLogOnInfo logOnInfo = new TableLogOnInfo();

ReportDocument rpdMy0= new ReportDocument();

logOnInfo.ConnectionInfo.ServerName = "NNN";

logOnInfo.ConnectionInfo.Password="dong";

logOnInfo.ConnectionInfo.DatabaseName="Lab";

logOnInfo.ConnectionInfo.UserID = "sa";

String path = Server.MapPath("CrystalReport2.rpt");

rpdMy0.Load(path);

rpdMy0.Database.Tables[0].ApplyLogOnInfo(logOnInfo);

CrystalReportViewer1.ReportSource = rpdMy0;

其中:

TableLogOnInfo类是: 提供属性,以便检索和设置表连接选项.它有一个连接的属性ConnectionInfo,用来设置与数据库的连接.如上面的ServerName等.生成一个报表文档对象将前面我们做好的那个CrystalReport1.rpt赋给它.在这里要注意的是Database属性!然后把报表对象做为CrystalReportViewer1的数据源.

或者,获得数据库的方法改为直接从数据库获得DataSet

using System.Data.SqlClient;

using System.Collections.Specialized;

string strConn=System.Configuration.ConfigurationSettings.AppSettings["DB"].ToString();

using (SqlConnection conn = new SqlConnection(strConn))

{

SqlDataAdapter da = new SqlDataAdapter(strSQL,conn);//strSQL是SQL语言"select * from dbo.table1"

DataSet ds=new DataSet();

da.Fill( ds);

CrystalReport1 cr1 = new CrystalReport1();

cr1.SetDataSource( ds);

CrystalReportViewer1.ReportSource = cr1;

}

using CrystalDecisions.Shared;

using CrystalDecisions.CrystalReports.Engine;

在WebForm1.aspx.cs的Form_Load里面添加代码:

TableLogOnInfo logOnInfo = new TableLogOnInfo();

ReportDocument rpdMy0= new ReportDocument();

logOnInfo.ConnectionInfo.ServerName = "NNN";

logOnInfo.ConnectionInfo.Password="dong";

logOnInfo.ConnectionInfo.DatabaseName="Lab";

logOnInfo.ConnectionInfo.UserID = "sa";

String path = Server.MapPath("CrystalReport2.rpt");

rpdMy0.Load(path);

rpdMy0.Database.Tables[0].ApplyLogOnInfo(logOnInfo);

CrystalReportViewer1.ReportSource = rpdMy0;

其中:

TableLogOnInfo类是: 提供属性,以便检索和设置表连接选项.它有一个连接的属性ConnectionInfo,用来设置与数据库的连接.如上面的ServerName等.生成一个报表文档对象将前面我们做好的那个CrystalReport1.rpt赋给它.在这里要注意的是Database属性!然后把报表对象做为CrystalReportViewer1的数据源.

或者,获得数据库的方法改为直接从数据库获得DataSet

using System.Data.SqlClient;

using System.Collections.Specialized;

string strConn=System.Configuration.ConfigurationSettings.AppSettings["DB"].ToString();

using (SqlConnection conn = new SqlConnection(strConn))

{

SqlDataAdapter da = new SqlDataAdapter(strSQL,conn);//strSQL是SQL语言"select * from dbo.table1"

DataSet ds=new DataSet();

da.Fill( ds);

CrystalReport1 cr1 = new CrystalReport1();

cr1.SetDataSource( ds);

CrystalReportViewer1.ReportSource = cr1;

}

using CrystalDecisions.Shared;

using CrystalDecisions.CrystalReports.Engine;

在WebForm1.aspx.cs的Form_Load里面添加代码:

TableLogOnInfo logOnInfo = new TableLogOnInfo();

ReportDocument rpdMy0= new ReportDocument();

logOnInfo.ConnectionInfo.ServerName = "NNN";

logOnInfo.ConnectionInfo.Password="dong";

logOnInfo.ConnectionInfo.DatabaseName="Lab";

logOnInfo.ConnectionInfo.UserID = "sa";

String path = Server.MapPath("CrystalReport2.rpt");

rpdMy0.Load(path);

rpdMy0.Database.Tables[0].ApplyLogOnInfo(logOnInfo);

CrystalReportViewer1.ReportSource = rpdMy0;

其中:

TableLogOnInfo类是: 提供属性,以便检索和设置表连接选项.它有一个连接的属性ConnectionInfo,用来设置与数据库的连接.如上面的ServerName等.生成一个报表文档对象将前面我们做好的那个CrystalReport1.rpt赋给它.在这里要注意的是Database属性!然后把报表对象做为CrystalReportViewer1的数据源.

或者,获得数据库的方法改为直接从数据库获得DataSet

using System.Data.SqlClient;

using System.Collections.Specialized;

string strConn=System.Configuration.ConfigurationSettings.AppSettings["DB"].ToString();

using (SqlConnection conn = new SqlConnection(strConn))

{

SqlDataAdapter da = new SqlDataAdapter(strSQL,conn);//strSQL是SQL语言"select * from dbo.table1"

DataSet ds=new DataSet();

da.Fill( ds);

CrystalReport1 cr1 = new CrystalReport1();

cr1.SetDataSource( ds);

CrystalReportViewer1.ReportSource = cr1;

}
如果你用的是水晶报表的推模式,一般不用设置登陆信息,但是要这样写:obj.SetDataSource(this.ds.Tables["tablename"]);如果你写成了obj.SetDataSource(this.ds)就会有登陆框的。

如果你用的是水晶报表的拉模式,你就一定要写上登陆信息:
crReportDocument = new OracleReport();
//Set the crConnectionInfo with the current values stored in the report

crConnectionInfo = crReportDocument.Database.Tables[0].LogOnInfo.ConnectionInfo;
/* Populate the ConnectionInfo Objects Properties with the appropriate values for

the ServerName, User ID, Password and DatabaseName. However, since Oracle

works on Schemas, Crystal Reports does not recognize or store a DatabaseName.

Therefore, the DatabaseName property must be set to a BLANK string. */

crConnectionInfo.DatabaseName = "";

crConnectionInfo.ServerName = "Your Server Name";

crConnectionInfo.UserID = "Your User ID";

crConnectionInfo.Password = "Your Password";
//Set the CrDatabase Object to the Report's Database

crDatabase = crReportDocument.Database;
//Set the CrTables object to the Tables collection of the Report's dDtabase

crTables = crDatabase.Tables;
//Loop through each Table object in the Tables collection and apply the logon info

//specified ealier. Note this sample only has one table so the loop will only execute once

foreach (Table crTable in crTables)

{

crTableLogOnInfo = crTable.LogOnInfo;

crTableLogOnInfo.ConnectionInfo = crConnectionInfo;

crTable.ApplyLogOnInfo (crTableLogOnInfo);
// if you wish to change the schema name as well, you will need to set Location property as follows:

// crTable.Location = "<new schema name>." + crTable.Name;

}
//Set the ReportSource of the CrystalReportViewer to the strongly typed Report included in the project

crystalReportViewer1.ReportSource = crReportDocument;

还有一点要注意:

如果你用到了子报表,一定要处理:
//Go through each sections in the main report and identify the subreport by name

crSections = crReportDocument.ReportDefinition.Sections;
foreach(Section crSection in crSections)

{

crReportObjects = crSection.ReportObjects;

//loop through all the report objects to find all the subreports

foreach(ReportObject crReportObject in crReportObjects)

{

if (crReportObject.Kind == ReportObjectKind.SubreportObject)

{

//you will need to typecast the reportobject to a subreport

//object once you find it

crSubreportObject = (SubreportObject)crReportObject;
//open the subreport object

crSubReportDoc = crSubreportObject.OpenSubreport(crSubreportObject.SubreportName);

//Once the correct subreport has been located pass it the

//appropriate dataset

if(crSubReportDoc.Name == "FirstSub")

{

//crSubReportDoc.Database.Tables[0].SetDataSource(ds);

crSubReportDoc.SetDataSource(ds);

}

}

}

}

crystalReportViewer1.ReportSource = crReportDocument;
同样crSubReportDoc.SetDataSource(ds);改为:crSubReportDoc.SetDataSource(ds.Tables["tablename"]);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: