xugang 记录一个.NET 程序员的成长 asp.net水晶报表的一些问题

简介:

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"]);



本文转自钢钢博客园博客,原文链接:http://www.cnblogs.com/xugang/archive/2007/09/13/892037.html,如需转载请自行联系原作者

相关文章
|
2月前
|
开发框架 前端开发 JavaScript
盘点72个ASP.NET Core源码Net爱好者不容错过
盘点72个ASP.NET Core源码Net爱好者不容错过
112 0
|
2月前
|
开发框架 .NET
ASP.NET Core NET7 增加session的方法
ASP.NET Core NET7 增加session的方法
62 0
|
4天前
|
开发框架 搜索推荐 前端开发
【.NET全栈】ASP.NET开发Web应用——Web部件技术
【.NET全栈】ASP.NET开发Web应用——Web部件技术
|
1月前
|
安全 程序员 Shell
老程序员分享:NSIS自定义界面,下载并安装Net.Framework4.8
老程序员分享:NSIS自定义界面,下载并安装Net.Framework4.8
|
1月前
|
Linux C# C++
【.NET Developer】创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务
本文介绍了如何使用VS2019和.NET框架创建一个Blazor应用,并将其部署到Azure应用服务。首先,Blazor是一个使用C#而非JavaScript构建交互式Web UI的框架,支持共享服务器和客户端应用逻辑,以及与Docker和Azure集成。任务包括创建Blazor项目,配置Dockerfile为Linux容器,本地测试,发布到Azure Container Registry (ACR),然后在Azure App Service for Container上部署。在部署过程中,需确保Docker设置正确,开启ACR的Admin访问权限,并监控镜像拉取和容器启动日志。
|
2月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
184 5
|
2月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
|
2月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
186 0
|
2月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
118 0
|
2月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
47 0