注意:在飞刀我的VS.Net正式版中自动生成的代码中ReportSource产生的样式不是这样子的,它是: ReportSource="" 这样是错误的,会出现错误信息,有两处错误: 必须按照使用本文介绍的格式来手动修改,这也算是VS.Net的一个Bug吧。 6) 在Page_Load方法中调用DataBind方法。(代码为VB.Net) Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) DataBind() End Sub 7)保存并编译你的页面。 现在,你就有一个内嵌水晶报表的WebForm页面了。 注意:实际开发中,一开始会出现无法访问inetsrv目录的错误,解决的办法是改变其目录的安全属性,使User用户有可写的权限。飞刀我发现.Net系统自已给出的解决方法是没有用的,也可能是我使用的是Windows.Net操作系统的原因。
能说的详细点吗?能给我一个例子吗?我好急呀
CrystalDecisions.CrystalReports.Engine.ReportDocument rpt=new CrystalDecisions.CrystalReports.Engine.ReportDocument();报表绑定部分省略。报表导出部分。。
//导出文件
CrystalDecisions.Shared.DiskFileDestinationOptions file=new CrystalDecisions.Shared.DiskFileDestinationOptions();
//文件扩展名
string fileExtend=null;
//根据选择导出不同格式的文件
//sltExport是一个下拉列表框控件,有三个选项,可以先择导出Word文件、Excel文件与PDF文件
switch(this.sltExport.SelectedValue)
{
case "3":
fileExtend=".doc";
rpt.ExportOptions.ExportFormatType=CrystalDecisions.Shared.ExportFormatType.WordForWindows;
break;
case "4":
fileExtend=".xls";
rpt.ExportOptions.ExportFormatType=CrystalDecisions.Shared.ExportFormatType.Excel;
break;
case "5":
fileExtend=".pdf";
rpt.ExportOptions.ExportFormatType=CrystalDecisions.Shared.ExportFormatType.PortableDocFormat;
break;
}rpt.ExportOptions.ExportDestinationType=CrystalDecisions.Shared.ExportDestinationType.DiskFile;
//文件名
string fileName=Session.SessionID + DateTime.Now.ToString("yyyyMMddHHmmss") + fileExtend;
//文件导出路径
file.DiskFileName=this.Server.MapPath("..//Temp//"+fileName);
rpt.ExportOptions.DestinationOptions=file;
rpt.Export();
//从浏览器打开文件
Page.RegisterStartupScript("temp", "<script language='javascript'>window.open('../Temp/"+fileName+"');</script>");
同情!顶
www.dotnet8.com 2002-9-6 DotNet吧[HTML]在我们对VS.Net中的水晶报表(Crystal Reports)进行研究之前,我和我朋友对如何将这个复杂的东东加入我们的Web应用有着非常的好奇心。一周以后,在阅读了大量的“HOWTO”文档之后,我们成功地将一些简单的报告加入到了我们的Asp.net程序中,并得到了一些小决窍。
这篇文章教你如何在.Net Web应用中使用水晶报表,也可以让你在学习过程中少走一些弯路。为了得到最好的效果,读者最好需要有一些基础的Asp.Net访问数据库的知识以及使用VS.Net的开发经验。
简介
水晶报表可以由很多的方法得到,其中一个就是使用VS.Net来创建,它提供了非常丰富模型以使我们能够在运行时操作属性和方法。如果你正在使用VS.Net开发.Net程序,那么你就不需要再安装其它软件了,因为他已经内嵌在VS.Net中了。
优点:
VS.Net水晶报表有下面一些主要的优点:
快速的报表开发
能够导出成为复杂的交互性图表
可以与其它控件一起在WebForm中使用
能够动态地将报表导出成为.pdf,.doc,xls,html,rtf等多种格式
结构:
一些组件组成了水晶报表的二层结构,需要的Web应用有:
客户端 :
客户端仅需要一个可以访问嵌入aspx页面报表的游览器就可以了
服务器 :
- 水晶报表引擎(Crystal Report Engine (CREngine.dll))
通过它可以完成一些任务,如在报告文件中合并数据,转换报告为其它格式等。也正是因为报告引擎的作用,才可以将Asp.Net中的水晶报表转换成为普通HTML格式
- 水晶报表设计器(Crystal Report Designer (CRDesigner.dll))
水晶报表就是在设计器中创建的,在设计器中你可以设计标题,插入数据,公式,图表,子报表等。
- .rpt报表文件
执行报表中的第一步就是在水晶报表设计器接口创建此报表,在默认安装中微软已经提供了一些现成的.rpt例子。
- Data Source
.rpt文件取得数据库的方法取决于你方法的选择,你能选择让水晶报表自己选择数据而不使用任何代码或者也可以选择手动的组装DataSet,然后再将其传送到报表文件。
- 水晶报表查看控件(Crystal Report Viewer web form Control (CRWebFormViewer.dll))
水晶报表查看控件是一个WebForm控件,可以将它看成是一个在.aspx页面中存放报表的容器。 注意:在一些复杂的操作中,报表服务器与Web服务器可能不在同一物理主机上,Web服务器将HTTP请求传送到报表服务器上去。水晶报表也可以当做WebService来执行。
执行模式
水晶报表取数据可以使用下面的方法实现:
- Pull 模式:
被请求时,水晶报表直接根据指定的驱动连接数据库然后组装这些数据。
- Push 模式 :
此时开发表不得不自己编写代码连接数据并组装DataSet,同时将它传送至报表。在些这种情况下,通过使用连接共享以及限制记录集合的大小,可以使用报表性能最大化。
报表类型:
水晶报表设计器能够直接包含报表至工程也能够使用独立的报表对象。
- Strongly-typed 报表 :
当你将报表文件加入到项目中去时,它就变成了一个了“ strongly-typed“报表。在这些情况下,你将拥有直接创建报表的对象的权力,这将减少一些代码并且能够提供一些性能。
- Un-Typed 报表 :
这里的报表并不直接包含在项目中,因此称为‘un-typed’ 报表。在这种情况下,你不得不使用水晶报表的”ReportDocuemt“对象建立一个实例,并且”手动“地凋用报表。
其它注意事项
- 尽管水晶报表查看器拥有一些很酷的功能,如缩放、页面导航等。但是他不提供打印功能,你不得不调用游览器的打印功能。
- VS.Net中的水晶报表如果没有注册,那么它只能使用30次,30次后,”保存“功能就不能再使用了。为了避免这个,你不是不在 http://www.crystaldecisions.com/这里注册此产品。 (好像不是这样子的,不注册也好像能用很长的时间,只是不能提供支持)
- 默认安装的水晶报表只能支持5个用户,为了支持更多的用户,你不得不在 http://www.crystaldecisions.com/中购买许可证。
让我们感受一下----在Asp.net中使用一个现成的水晶报表文件
1) 从WebForm工具栏中拖动水晶报表查看器控件(Crystal Report Viewer)至.aspx页面中。
2) 调出水晶报表查看器控件的属性窗口
3) 点击[...]按钮查看"Data Binding"属性,并弹出了DataBinding窗口。
4) 从左边的"Bindable属性”区中选择“Report Source”
5) 选中"自定义绑定表达式"单选按钮,在右边的底部的窗口中指定.rpt文件的文件名和路径,例如:"C:\\Program Files\\Microsoft Visual Studio.NET\\Crystal Reports\\Samples\\Reports\\General Business\\World Sales Report.rpt",然后”确定“
注意:文件”World Sales Report.rpt“文件是在VS.Net安装时创建的。如果你在安装过程中指定了其它目录,此时你最好确认一下路径的正确性。
上面的步骤中实际上是插入了下面这些代码至Asp.Net文件中:
以及:
id="CrystalReportViewer1"
runat="server" Width="350px" Height="50px"
ReportSource=''>
注意:在飞刀我的VS.Net正式版中自动生成的代码中ReportSource产生的样式不是这样子的,它是:
ReportSource=""
这样是错误的,会出现错误信息,有两处错误:
必须按照使用本文介绍的格式来手动修改,这也算是VS.Net的一个Bug吧。
6) 在Page_Load方法中调用DataBind方法。(代码为VB.Net)
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
DataBind()
End Sub
7)保存并编译你的页面。 现在,你就有一个内嵌水晶报表的WebForm页面了。
注意:实际开发中,一开始会出现无法访问inetsrv目录的错误,解决的办法是改变其目录的安全属性,使User用户有可写的权限。飞刀我发现.Net系统自已给出的解决方法是没有用的,也可能是我使用的是Windows.Net操作系统的原因。
[/HTML]
private void Button1_Click(object sender, System.EventArgs e)
{
string printername;
printername=this.TextBox1 .Text .Trim ();
//oRpt.PrintOptions .PrinterName ="hp laserjet 6l";
oRpt.PrintOptions .PrinterName=printername;
oRpt.PrintToPrinter (1,false,1,1);
}这里的oRpt请大家参见我发表的关于登陆错误的帖子(这是一个全局变量)关于如何实现打印预览的问题:
private void ButtonPreview_Click(object sender, System.EventArgs e)
{
CrystalReportViewer1.ReportSource = oRpt;
}
关于CrystalReportViewer1 、oRpt请大家参见我发表的关于登陆错误的帖子(这是一个全局变量)关于打印只能在服务器上执行的问题
?程序原理:
客户在浏览器终端执行我的print.aspx页面上的“打印”按扭,执行打印命令。客户可以根据客户本地打印机的名称,在打印机名称的文本框里输入自己的打印机名,并且打印任务应该在客户端的打印机上执行。
可实际上却不是按照上述的要求执行的。
如果客户端的打印机名称(例如hp5000)和.rpt报表格式文件中设置的打印机的名称(如hp laserjet 6l)不一致,系统会出错,提示找不到打印机。在打印时我是让用户根据自己的计算机
如果客户端的打印机名称(例如hp5000)和.rpt报表格式文件中设置的打印机的名称(如hp5000)相同,客户在客户端执行打印任务。可是却是在服务器端的打印机上则成功执行打印任务,客户端的打印机却丝毫没有反映(按理是应该在客户端的打印机上执行)。取自:http://www.aspx.cn/club/forum.asp?Forum_ID=3
http://www.aspxcn.com/dotnetbbs/Good.aspx?fbId=23
我们的支持网站:http://support.crystaldecisions.com。
有关详细信息,请访问我们网站的:Crystal Reports 产品新闻
http://china.crystaldecisions.com/products/crystalreports/Crystal Reports 演示
http://www.crystaldecisions.com/products/crystalreports/showme/ Crystal Enterprise 产品新闻
http://china.crystaldecisions.com/products/crystalenterprise/ 产品信息
http://china.crystaldecisions.com/products/开发人员社区
http://www.crystaldecisions.com/products/dev_zone/联机支持、示例和技术简报
http://support.crystaldecisions.com培训及咨询
http://china.crystaldecisions.com/services/Crystal Decisions 主页
http://china.crystaldecisions.com
但水晶报表后面的设计就要靠你自己了 主要是看懂代码怎么回事 改一下就可以用了
(这是我当初的第一次 哈哈 我要保存她一辈子 虽然她很丑)
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System.IO;
using System.Configuration;
namespace WebApplication3
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
SqlConnection Conn=new SqlConnection("server=192.168.25.208;database=pubs;uid=sa;password=sa;Timeout=9600");
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Label Label2;
protected System.Web.UI.WebControls.Label Label3;
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.TextBox TextBox2;
protected System.Web.UI.WebControls.TextBox TextBox3;
Athor Ath = new Athor();
string message;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
} #region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void Button1_Click(object sender, System.EventArgs e)
{
int Total=0;
string lorange=TextBox1.Text.ToString().Trim();
string hirange=TextBox2.Text.ToString().Trim();
string city=TextBox3.Text.ToString().Trim();
string sql="exec Sales_Stores_rpt '"+lorange+"','"+hirange+"','"+city+"'";
// Response.Write(sql);
// Response.End();
SqlCommand comm=new SqlCommand(sql,Conn);
comm.CommandTimeout=1200;
SqlDataAdapter da=new SqlDataAdapter(comm);
DataSet ds=new DataSet();
try
{
da.Fill(ds,"athor");
}
catch(Exception er)
{
Response.Write(er.Message);
Response.End();
} if (ds.Tables[0].Rows.Count>0)
{
Total=ds.Tables[0].Rows.Count;
Ath.SetDataSource(ds);
// 声明变量并获取导出选项。
ExportOptions exportOpts = new ExportOptions();
DiskFileDestinationOptions diskOpts = new DiskFileDestinationOptions();
exportOpts = Ath.ExportOptions;
// 设置导出格式。
exportOpts.ExportFormatType =ExportFormatType.PortableDocFormat;// ExportFormatType.PortableDocFormat;
exportOpts.ExportDestinationType =ExportDestinationType.DiskFile; // 设置磁盘文件选项。
string pdfname="Athor"+DateTime.Now.ToShortDateString()+"_"+DateTime.Now.ToLongTimeString().Replace(":","-")+"_"+DateTime.Now.Millisecond.ToString()+".pdf";
diskOpts.DiskFileName = Server.MapPath("./PDF/"+pdfname);
exportOpts.DestinationOptions = diskOpts;
// 导出报表。
Ath.Export();
Response.Write("<script>window.open('../Athor Report/PDF/"+pdfname+"','scrollbars=yes,toolbar=no,menubar=no,resizable=yes');</script>");
}
else
{
AddHtml("<script>{alert('没有记录,请重新输入查询条件!');}</script>");
// Response.Write("<script>alert('没有数据,请重新输入查询条件!');history.go(-1);</script>");
// Response.End();
}
da.Dispose();
ds.Dispose();
Conn.Close();
}
protected void AddHtml(string addstr)
{
message=addstr;
}
protected override void Render(HtmlTextWriter output)
{
base.Render(output);
output.Write(message);
message="";
}
}
}