2005年3月18日
有时大家在做报表的时候会碰到做一些汇总表及明细表,并且客户会要求在看汇总表的时候可以看到相
应的明细表,大家很快会想到子报表,不错使用子报表能够到达这样的效果,但由于现系统中的汇总表
和明细表是2个查询页面,所以就没有使用子报表的方案,而是使用对汇总报表中的各个记录使用超链
并传参数的方法来解决的,下面就简单介绍一下具体的方法:
1.报表当然是通过ReportView来呈现;
2.让呈现的汇总报表中的记录带上超链接,链接到这条记录所对应的明细报表(看效果图),这就是本
贴所要讲述的重点;
使用水晶报表自带的格式化编辑器就能很快解决这个问题(当然各位可能还有其他的好办法);
具体做法请看图解;
其实,格式化编辑器还有很多功能,还望能和大家一起学习!
2004年12月23日
NewsGator 是在Microsoft Outlook中运行的"新闻集结器",能让你从多个集成新闻来源(如weblogs,新闻站点等)订阅,并将新闻投送到Outlook文件夹中.网络上有上千个站点将他们的内容组合成RSS格式,并且每天增添有更多的站点.通过NewsGator你还可以阅读NNTP 新闻组.
详情请到 http://www.newsgator.com 网站
破解请到 http://www.down99.com/SoftView/SoftView_16906.html
2004年10月21日
最近一直忙于关于
生产计划管理系统的开发,所以很少在这里留言,请各位见谅!还好项目已经进入测试最后阶段,由于项目中对报表的处理使用了水晶报表,加上有很多朋友都留言讲述自己在使用水晶报表开发过程中遇到的问题,所以这次我写了些使用水晶报表的技巧,供大家参考(纯属个人经验,不对处请指正)。
其实在我以前的3篇帖子中基本上对使用水晶报表遇到的问题如何处理做了讲述,这里就不再重复,大家可以看我以前的帖子。这里主要讲一下使用视图解决在报表中的多表关联问题。
往往在报表中要用到多张表的多个字段,如果在rpt文件里进行关联会感觉很烦而且到最后连自己都搞不清了。建议在数据库中建立相应的视图,这样的话就省掉不少麻烦而且不容易出错。
1.在数据库中建立视图。
2.直接把视图拖入数据集文件view.xsd,生成数据集。
3.建立rpt文件,在ADO.NET数据源中选择刚刚建立的dataset。
4.建立.aspx文件 拖入报表控件。
5.在.aspx.cs中声明并实例化在第2步建立的数据集, view v = new view();
这里要用到SQL语句了,不过也很简单,把视图里的sql语句拷贝过来就可以了,如果你要加进行筛选的话加入条件就可以了;
然后对 v 进行填充数据 sqlDataAdapter1.Fill(v,"视图名称");
最后把 v 绑定到rpt文件
基本上就是这样,还有问题的话大家请留言吧:)
2004年6月30日
1.ASP.NET2.0框架:
http://www.microsoft.com/downloads/details.aspx?FamilyId=F1232C37-0FEE-4AA6-AA89-B6DCEFC0873B&displaylang=en2.开发Web应用程序:Visual Web Developer 2005 Express Edition
3.开发Windows应用程序:Visual C# 2005 Express Edition Visual Basic 2005 Express Edition
4.SQL 2005:SQL Server 2005 Express Edition
。。。
下载地址:
http://lab.msdn.microsoft.com/express/default.aspx 建议使用
Microsoft Virtual PC 2004
2004年6月24日
其他区的连接可以连的上,不知道是GUSH的问题还是这个连接有问题??
不知道其他人有没有这个情况??
2004年6月23日
主要的功能增强
- Excel 呈现扩展插件已经过改进,现在可以在较早版本的 Excel 中支持查看功能。
- PDF 呈现扩展插件更加强健并具有更出色的性能。
- 图表控件可以更好地控制显示样式。
- 现在支持从报表内部引用外部 URL(图像和资源)。
- 增强了报表预览功能的数据缓存行为。
- 现在支持在表达式中使用换行符。
- 现在可以通过样式表修改 HTML 查看器工具栏的样式。
- 新的 URL 参数为运行时自定义报表显示提供了更多选项
- 报表管理器代理保留了身份验证 cookie,以便自定义安全扩展插件使用它们。
- 现在支持隐藏的参数。
- 可以压缩临时快照并将其存储在文件系统上。
- 可以禁用对访问报表数据源的集成安全性支持。
下载地址:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=580febf7-2972-40e7-bccf-6cd90ac2f464#filelist
2004年6月15日
与上一个例子不同的地方在于数据访问组件是一个以Web服务形式实现的中间层,提供一个GetCustomers方法检索数据库中的数据,而且通过HTTP以标准的SOAP提供给客户机。
1.具体实现(代码仅供参考)
中间层 customer-data.asmx 实现Web服务
<%@WebService Language="C#" Class="Customer"%>
using System;
using System.Data;
using System.Web.Services; //导入Web服务命名空间
using System.Configuration;
[WebService(Description="Customer Service",Namespace="http://127.0.0.1/webservices/4923/customer")]
public class CustomerOrders
{
[WebMethod] public DataSet GetCustomers(String strCustID, String strCustName) //使用[WebMethod]特性表明GetCustomers方法通过Web服务可用,没有声明[WebMethod]特性的公共函数对客户机通过Web服务是不可用的。
{
//根据客户ID或客户姓名检索数据并返回DataSet
}
}
表示层:
(1)使用Web服务行为组件(webservices.htc),将其用于IE中来处理Web服务。关于webservices.htc的介绍及下载可到 http://msdn.microsoft.com/workshop/author/webservice/webservice.asp
<div style="behavior:url(../../global/webservice.htc)" id="htcWService">
View Customer - Select Customer
</div>
(2)用javascript声明一个全局变量保存MSXML分析起实例,创建一个openWebService函数打开Web服务 一旦webservice.htc行为插入页面,就可以使用它来访问Web服务
<body onload="openWebService()">
var objXMLData;
function openWebService() {
htcWService.useService("customer-data.asmx?WSDL","CustData"); //使用行为的useService方法打开Web Service,通过加载服务器的WSDL文档做到用户能够通过WSDL追加到查询字符串来制定它,同时提供一个“友好名称”CustData,将在代码中使用它来引用Web服务
var iCallID = htcWService.CustData.callService(dataLoaded, "GetCustomers", "", ""); //指定callService方法所需的参数:事件处理程序名,调用的方法名以及此方法的参数,为了得到所有的客户,使用了2个空字符串作为参数
}
function dataLoaded(objResult) {
if(objResult.error) { //检查是否出错
var strErrorCode = objResult.errorDetail.code;
var strErrorMsg = objResult.errorDetail.string;
var strErrorRaw = objResult.errorDetail.raw;
}
else { //如果没有出错,则将返回的数据转换成MSXML分析器的一个实例
try {
objXMLData = new ActiveXObject('MSXML2.FreeThreadedDOMDocument');
}
catch(e) {}
if (objXMLData == null) {
return;
}
objXMLData.onreadystatechange = changeFunction;
objXMLData.validateOnParse = true;
objXMLData.async = true;
objXMLData.loadXML(objResult.raw.xml); //从Web服务加载SOAP文档
}
}
function changeFunction()参考上个例子
(3)查找并显示顾客详细资料:参考上个例子
2004年6月11日
1. 一个简单案例:客户机通过输入用户ID或用户名称搜索用户,客户机使用Ie5.0及以上版本。
2. 基本思路:将要发送的客户机的XML数据来至于数据访问层,数据被数据访问组件外置成DataSet,从DataSet提取XML数据并使用DataSet的GetXml或WriteXml方法将数据传递到客户机,然后通过网络将XML作为纯文本传送给客户机,在客户机它被加载到客户机端XML分析器准备使用。
3. 具体实现(代码仅供参考):
中间层组件 customer-data.aspx:从数据库中取出数据生成DataSet,并返回Xml文档。
Page_Load
{
DataSet ds=new DataSet();
ds=GetDataSet();
Response.ContentType="text/xml";
Response.Write("<?xml version='1.0'?>");
ds.WriteXml(Response.OutputStream);
}
HTML表示层(客户机端):
(1)用javascript声明一个全局变量保存MSXML分析起实例,创建一个loadCustomerList函数,此函数以声明中间层组件的URL开始,实例化需要的MSXML分析器对象,同时检查实例化是否成功。
<body onload="loadCustomerList()">
var objXMLData ;
function loadCustomerList() {
var strURL = 'customer-data.aspx';
try {
objXMLData = new ActiveXObject('MSXML2.FreeThreadedDOMDocument'); //使用MSXML分析器版本2,并且使用免费的线程版本(因为后面要用到XSLT样式表)
}
catch(e) {}
if (objXMLData == null) {
//报错,提示没有安装正确的MSXML版本
return;
}
objXMLData.onreadystatechange = changeFunction; //changeFunction函数负责在XML已经结束加载时监督检查
objXMLData.validateOnParse = true; //有效性验证
objXMLData.async = true; //异步加载XML
objXMLData.load(strURL); //加载XML文档
}
function changeFunction() {
// 检查XML分析器的readyState值
// 当值为4时,表明加载或者完成了或者在加载XML时出现了错误
if (objXMLData.readyState == 4) {
if (objXMLData.parseError.errorCode != 0)
//加载XML时出现了错误
else {
//加载完成
}
}
}
(2)查找并显示顾客详细资料: 用户使用文本搜索框来搜索客户而不发生给服务器的回送,不管执行多少次搜索(为了提供更高更快的响应和用户接口)。
<button id="btnSearch" onclick="doSearch('CustomerID')"></button>
function doSearch(strSortOrder) {
//得到用户ID或用户姓名,strSortOrder是排序参数
//转换XML文档 并把转化后的结果存入一变量
var strResult = getStyledResult(strCustID, strCustName, strSortOrder);
if (strResult.length > 0) {
//呈现strResult
}
else {
//没有符合的数据
}
}
function getStyledResult(strCustID, strCustName, strSortOrder) {
//使用XSLT样式表转换XML文档
//建立XPath字符串
if (strCustID.length > 0)
var strXPath = 'descendant::Customers[starts-with(child::CustomerID, $custid)]'
else
var strXPath = 'descendant::Customers[contains(child::CompanyName, $custname)]';
//创建样式表代码
var strStyle = '<?xml version="1.0" ?>\n'
+ '<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">\n'
+ ' <xsl:param name="custid" />\n'
+ ' <xsl:param name="custname" />\n'
+ ' <xsl:template match="/">\n'
+ ' <table id="tblCustomers" cellspacing="0" cellpadding="5"\n'
+ ' rules="cols" border="1" style="border-collapse:collapse;">\n'
+ ' <tr style="background-color:silver;">\n'
+ ' <td align="center">\n'
+ ' <a href="javascript:doSearch(\'CustomerID\')"><b>ID</b></a>\n'
+ ' </td>\n'
+ ' <td align="left">\n'
+ ' <a href="javascript:doSearch(\'CompanyName\')"><b>Customer Name</b></a>\n'
+ ' </td>\n'
+ ' <td align="left">\n'
+ ' <a href="javascript:doSearch(\'City\')"><b>City</b></a>\n'
+ ' </td>\n'
+ ' <td></td>\n'
+ ' </tr>\n'
+ ' <xsl:for-each select="' + strXPath + '">\n'
+ ' <xsl:sort select="' + strSortOrder + '" data-type="text" order="ascending" />\n'
+ ' <tr>\n'
+ ' <td align="center" style="background-color:#add8e6;">\n'
+ ' <xsl:value-of select="CustomerID" />\n'
+ ' </td>\n'
+ ' <td align="left">\n'
+ ' <a>\n'
+ ' <xsl:attribute name="href">\n'
+ ' view-orders.aspx?customerid=<xsl:value-of select="CustomerID" />\n'
+ ' </xsl:attribute>\n'
+ ' <xsl:value-of select="CompanyName" />\n'
+ ' </a>\n'
+ ' </td>\n'
+ ' <td align="left">\n'
+ ' <xsl:value-of select="City" />\n'
+ ' </td>\n'
+ ' <td align="left">\n'
+ ' <a>\n'
+ ' <xsl:attribute name="href">\n'
+ ' ../../update-orders/ie5/edit-orders.aspx?customerid=<xsl:value-of select="CustomerID" />\n'
+ ' </xsl:attribute>\n'
+ ' Edit Orders\n'
+ ' </a>\n'
+ ' </td>\n'
+ ' </tr>\n'
+ ' </xsl:for-each>\n'
+ ' </table>\n'
+ ' </xsl:template>\n'
+ '</xsl:stylesheet>';
var objXMLStyle = new ActiveXObject('MSXML2.FreeThreadedDOMDocument');
objXMLStyle.loadXML(strStyle);
var objTemplate = new ActiveXObject('MSXML2.XSLTemplate'); //创建一个MSXML XSLTemplate实例,并指定它的stylesheet属性
objTemplate.stylesheet = objXMLStyle;
var objProc = objTemplate.createProcessor(); //创建一个XSLProcessor对象
objProc.input = objXMLData; //处理objXMLData文档
objProc.addParameter('custid', strCustID); //指定参数
objProc.addParameter('custname', strCustName);
if (objProc.transform() == true) //判断是否转换成功
var strResult = objProc.output
else
var strResult = '';
return strResult;
}
以上就是实现的基本思路和主要代码,如果有哪位老兄正在研究分布式数据应用,请一起讨论啊!
并有以下问题需要解决:
如何通过XSLT转换进行分页处理??
2004年6月2日
前几天一个偶然的机会上了odetocode.com,看到几篇关于SQL Reporting Services的文章,很有启发性,于是结合了Reporting Services 联机丛书研究了一下,我的困惑算是暂时解决了
。
通过直接传递参数给.aspx页面(使用ReportViewer控件呈现报表),在.aspx页面中接受参数从而呈现所需报表。主要解决方法如下:
1.用vs.net打开ReportViewer这个项目,项目文件夹在你安装的SQL Reporting Services的相关文件夹中(见图1)。

2.打开ReportViewer.cs文件,写入以下方法(见图2),然后重新编译这个项目。

3.新建一个带参数的报表文件rdl,具体不详述,请参考我以前的文章。
4.新建一个.aspx文件,引用编译好ReportViewer.dll,拖入这个控件到.aspx页面(见图3),

可以在ReportViewer的属性栏中直接设置报表路径和报表服务器路径及相关属性,也可以在.aspx.cs的page_load中用code的方式设置(见图4)。

5.为了测试传递参数,再建一个htm页面加入一个链接,连接中加入所要传递的参数(见图5)。

6.在.aspx.cs代码中接受传递来的参数,同时要把接收到参数传递给报表,这就用到了图2中的方法了(见图6)。

7.运行后就可以得到你所传参数的报表了(见图7),上面没有查询参数框是因为在ReportViewer属性的Parameters设为false了,这样看起来界面更好一点。

总结一下:最主要的地方还是在第2步,其实我们可以添加其他类似的方法来达到自己所要的结果。如果要传递2个或3个值怎么办,其实方法也是一样的,只要在报表文件中设置2个或3个参数就可以了。另外补充一下关于导出打印的问题,其实可以在.cs代码中直接设置导出的格式,比如 this.ReportViewer1.Format=“pdf“;这样页面就直接会用acrobat打开的。
以上纯属个人使用经验,若有不对的地方请大家指正,也欢迎大家一起讨论
。
2004年5月19日
昨天参加了微软的开放日活动,体验了一下“集成+创新”,我参加的主题有:
1.企业应用系统集成 EAI,讲述了 BizTalk Server 2004
2.企业信息门户 EIP,讲述了 SharePoint Portal 2003
3.商业智能 BI,主要讲了SQL Reporting Services
不过关于SQL Reporting Services我还有一点困惑
:
1.我在上次的测试中(http://www.cnblogs.com/zsww/)就有了这个疑问,就是好像不能通过连接地址传递参数的方式获得报表(比如 http://localhost/a.aspx?year=2004&month=5), Reporting Service只能在rdl文件中设置参数,然后在报表中填入参数得到报表。
2.报表打印的时候一定要导出一种格式才能打印,不能直接打印,好像似乎烦了一点,可能用户要求高了一点啊
。
如果各位有同感可以发表一下你的意见或想法,谢谢!
2004年5月1日
今天很意外的收到了微软公司TechNet小组寄来的节日问候,一张卡片,一张MSN表情贴纸和一件TechNet主题的T裇。感觉微软真的周到,比较人性化。我倒不是因为寄来的这点东西而发出这样的感慨,而是感觉到了微软公司的客户服务的确做到了家,可能这就是微软比较能够会聚集人气的高招吧

!
2004年4月14日
这两天正在试用SQL Reporting Services,对照着帮助文件做了个简单的项目,感觉下来这个工具比水晶报表容易上手(可能是没有深入的原因)
,在这里写了些开发报表项目的基本步骤及相关操作(比较简单),希望和大家共享,另外上传了2张图片看一下报表的界面,功能还是比较强的
!
1.报表生成
1)在Vs.net里新建项目:选择商业智能->报表项目。
2)添加共享数据源,后缀名.rds。
3)添加报表,后缀名.rdl。
4)新建DataSet,进入数据视图,和sqlserver的数据视图差不多,可以进行添加表、字段筛选等操作。
5)进入设计视图,从工具箱中拖入Table,在“字段”工具栏中拖入要显示的字段到表的详细信息里,表头根据需要自己设置。
6)预览视图。
7)进行分组操作:在设计视图里点击Table,插入分组,拖入分组字段,分组支持多个分组。
8)进行汇总操作:在设计视图里直接拖入需汇总的字段到表尾处。
9)添加页脚:在设计视图里右键选择页脚,从工具箱拖入文本框,右键选择表达式,在“全局”里选择PageNumber。
10)加图表:在设计视图里,在表中添加一行,拖入Chart控件,设置要显示的数据字段和分类字段,若要改变图标格式,右键选择ChartType。
11)文档地图:在设计视图里,编辑分组Group属性,设置document map label。
12)动态查询:在设计视图里,选择工具条中的“报表”,选择报表参数,添加参数后进行设置。
2.报表管理 主要就是报表服务器。
3.报表发布 在Vs.net里点击项目属性,设置TargetServerURL为 http://servername/reportserver


Microsoft® SQL Server™ 2000 Reporting Services 是一种基于服务器的新型报表平台,可用于创建和管理包含来自关系数据源和多维数据源的数据的表格报表、矩阵报表、图形报表和自由格式报表。可以通过基于 Web 的连接来查看和管理您创建的报表。
Reporting Services 提供了一套完整的服务、工具和应用程序编程接口 (API),您即使不是程序员也可以使用 Reporting Services。可以使用 Reporting Services 中包含的应用程序和工具来制作、发布和管理报表。此外,还提供了支持报表生存周期的各个阶段的工具或应用程序。程序员可以使用 API 将报表功能扩展或集成到自定义解决方案中。
支持 Web 的报表的优点
您可以在现有数据库服务器和 Web 服务器基础结构之上建立报表环境。Reporting Services 提供了在 Internet 信息服务下运行的多层服务器。您可以生成报表,让它们从现有的数据服务器中为任何具有由 .NET 管理的数据访问接口、OLE DB 访问接口或 ODBC 数据源的数据源类型提取数据。
报表部署还可以利用现有的基础结构和技术。用户可以使用已有的浏览器和导航技术来访问报表和管理工具。用户通过显示为文件夹层次结构的中央存储库来访问报表。您可以创建一个报表环境,将报表和相关内容组织进您设计的文件夹层次结构中。导航、搜索和订阅功能可以帮助用户找到并运行所需要的报表。
可以采用桌面格式和面向 Web 的格式呈现报表。您可以生成范围广泛的报表,将基于 Web 的功能和传统报表功能相结合。可以创建交互式报表、表格报表或自由格式报表,以根据计划的时间间隔检索数据或在用户打开报表时按需检索数据。矩阵报表可以汇总数据以便进行高级审核,同时在明细报表中提供支持详细信息。可以使用参数化报表基于运行时提供的值来筛选数据。用户可以从各种查看格式中进行选择,以首选格式动态呈现报表以便于数据的操作或打印。
为什么需要基于服务器的报表?
基于服务器的报表功能为实现以下任务提供了方法:集中存储和管理报表、设置策略和确保对报表及文件夹的安全访问、控制处理和分发报表的方式,以及将在业务中使用报表的方式标准化。
Reporting Services 是可伸缩的。您可以在单个服务器、分布式服务器和 Web 场配置中安装报表服务器。
关于平台
Reporting Services 具有模块化的体系结构。此平台基于一个报表服务器引擎,该引擎包含用于获取和处理数据的处理器和服务。处理任务分发给可以扩展或集成到自定义解决方案中的多个组件。检索数据并将检索的数据从数据处理任务中分离后,即开始进行显示处理。此功能允许多个用户采用为不同设备设计的格式同时查看同一报表,或快速更改报表的查看格式。只需单击便可将 HTML 转换成 PDF、Microsoft Excel 或 XML。
此体系结构专门为支持新型的数据源或输出格式而设计。Reporting Services 包含的呈现扩展插件用于采用 HTML 和用于桌面应用程序(例如 Adobe Acrobat (PDF) 和 Microsoft Excel)的其他格式呈现报表,但开发人员可以创建其他呈现扩展插件以利用打印机或其他设备功能。
开发人员可以将报表功能包括在自定义应用程序中,或扩展报表功能以支持自定义功能。呈现为 Web Service 的 API 提供了简单对象访问协议 (SOAP) 和 URL 端点,从而可以轻松地与新的或现有的应用程序和门户集成。
2004年4月11日
由于看了微软的产品演示,感觉这个报表工具还不错,所以下载了SQL Server 2000 Reporting Services ,可惜是评估版本

,不知哪里可以搞到正式版本啊

。
感觉SQL Server 2000 Reporting Services和VS.net搭配起来真的还行,具体到怎么一个程度我一时也说不上来,因为我也刚刚开始使用

。
有兴趣的朋友可以去下载:
http://www.microsoft.com/downloads/details.aspx?FamilyID=ba517c01-2e2f-4bc7-84af-149b7637f807&displaylang=zh-cn 另外有Reporting Services 联机丛书文档更新:
http://www.microsoft.com/downloads/details.aspx?FamilyID=5e550d73-8f35-435e-bb71-c8573a1cdbdb&displaylang=zh-cn 希望大家多多交流啊!另外我收到微软的邮件TechNet中文版光盘3月的已经寄出了,4月的在本月中旬,订阅的朋友注意查收啊!
2004年2月26日
我的系统是win2003

2004年2月19日

最近真的很忙 忙着装修房子 还要开始公司的项目
另外还搞点私人项目

真实累透啦。。。

昨天晚上1点中还在床上画着公司项目的流程手稿图。。没办法今天要交差啊。。。。
送给大家一个好东西 订阅blog站点的好东西
Gush 是从博客堂看到的。。。感觉不错!

http://www.2entwine.com/
另外再看看我最近做的一个雏形框架 请多提意见啊
http://chenwusong.vicp.net/bbs/test/window/index.htm
不过是朋友的服务器 可能不能正好开着 多试试吧
2004年2月10日
举个简单的例子:
员工表(员工编号 员工姓名 部门编号)
部门表(部门编号 部门名称)
要求是: select 员工表.员工姓名,部门表.部门姓名 from 员工表,部门表 where 员工表.部门编号=部门表.部门编号
操作步骤(列举几个比较重要 也是自己当时操作比较容易困惑的地方)
1.建xsd文件 直接拖入员工表和部门表 不要做任何字段关联
2.建rpt文件 选择员工表和部门表后 建立链接 员工表的部门编号---〉部门表的部门编号
3.建.aspx文件 拖入报表控件
4.在.aspx.cs中建立一个DataSet,里面是两张表,名称分别是员工表、部门表(和拖入XSD的名称保持 一致)
sql语句分别为:
select * from 员工表
select * from 部门表
基本上就是这样 大家可以试着做一下 有什么问题可以一起讨论一下
2004年2月5日
上一次自己做了直接在rpt文件里使用oledb连接使用数据库的方法 但是不是很灵活 这次做了使用sql语句直接生成dataset做为报表的数据源(即push模式),这样就可以接受参数了。当然报表有设置参数的功能 这方面我还没有详细研究

一.sql语句中没有使用表的相互关联(简单的查询语句)
设计一个DataSet1) 右击“解决方案浏览器”,选择“添加”--“添加新项”-->“数据集”
2) 从“服务器资源管理器”中的“SQL Server”中拖放“Stores”表(位于PUBS数据库中)
3) 此时在数据集中就会有一个Stores表的结构图。xsd文件中仅仅包含一个结构图,但是不会有任何数据在里面
创建一个.rpt文件crystalreport1.rpt同时将其指定给上一步建立的DataSet。
4) 使用上面的介绍过的方法创建此文件,唯一的不同就是使用数据集来代替前面的直接连接数据。
5)建立.rpt文件之后,右击“详细资料”-->"添加/删除数据库“
6) 在”数据库专家“窗口中,展开”项目数据“(代替以前的OleDb),展开“ADO.Net数据集”--"DataSet1“,选择”Stores“表。
7) 将”Stores"表添加到“选定的表”中,点击“OK”
8) 建立一个WebForm1.aspx 拖入一个Crystal Report Viewer 控件
9)WebForm1.aspx.cs
ReportDocument oRpt = new ReportDocument();
string RptDir="f:\\bbs\\test\\crystal\\crystalreport1.rpt";
oRpt.Load(RptDir);
...//根据sql语句得到DataSet 这个就不多说了
oRpt.SetDataSource(ds);
CrystalReportViewer1.ReportSource=oRpt;
//注意push模式用不到设置logOnInfo参数
10)运行试试看!应该没问题哦
另外送上水晶报表10的下载:http://sc.fixdown.com/fixdown/download.asp?id=14867&free=sx-down
2004年2月4日
初用水晶报表(vs .net2003集成,版本Version=9.1.5000.0)
装好后要注册 注册号:6707437608 密码:AAP5GKS0000GDE100DS
想要在.aspx文件中使用水晶报表
1.先新建文件webform1.aspx 在页面拖入组件CrystalReportViewer 生成代码
2.在项目的同个文件夹中新建文件crystalreport1.rpt? 在字段资源管理器的数据库字段“添加数据库” 请使用oledb连接 从而选择你所要在报表中显示的数据表(有向导)
3.在webform1.aspx.cs主要代码如下:
protected CrystalDecisions.Web.CrystalReportViewer CrystalReportViewer1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
TableLogOnInfo logOnInfo = new TableLogOnInfo ();
ReportDocument oRpt = new ReportDocument();
string RptDir="f:\\bbs\\test\\crystal\\crystalreport1.rpt"; //crystalreport1.rpt文件所在的绝对路径
oRpt.Load(RptDir);
//设置logOnInfo参数,注意这里如果不设?编译时最容易出现“登陆失败”的错误!
logOnInfo.ConnectionInfo.ServerName = "服务器名";
logOnInfo.ConnectionInfo.DatabaseName = "数据库名";
logOnInfo.ConnectionInfo.UserID = "用户名";
logOnInfo.ConnectionInfo.Password = "密码";
oRpt.Database.Tables [0].ApplyLogOnInfo(logOnInfo);
//建立.rpt文件与CryStalReportviewer文件之间的连接
CrystalReportViewer1.ReportSource=oRpt;
}
4.//生成pdf文档 在以上代码中加入
ExportOptions crExportOptions=new ExportOptions();
DiskFileDestinationOptions crDiskFileDestinationOptions=new DiskFileDestinationOptions();
crDiskFileDestinationOptions.DiskFileName="f:\\bbs\\test\\crystal\\crystalreport1.pdf";
crExportOptions=oRpt.ExportOptions ;
crExportOptions.DestinationOptions=crDiskFileDestinationOptions;
crExportOptions.ExportDestinationType =ExportDestinationType.DiskFile;
crExportOptions.ExportFormatType =ExportFormatType.PortableDocFormat ;
oRpt.Export();
oRpt.Close();
5.//读取报表导出的内容并传到客户端?继续加入以下代码
Response.ClearContent();
Response.ClearHeaders ();
Response.ContentType ="application/pdf";
Response.WriteFile("f:\\bbs\\test\\crystal\\crystalreport1.pdf");
Response.Flush();
Response.Close();?
以上完全是个人使用总结 如有不对或可以改进的地方 请大家指正!!!
2004年1月31日
2004年1月16日
首先祝大家新年快乐!
大家一齐努力吧,把这个blog做好!