惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
博客园 - 司徒正美
小众软件
小众软件
H
Help Net Security
博客园 - 聂微东
宝玉的分享
宝玉的分享
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
阮一峰的网络日志
阮一峰的网络日志
M
MIT News - Artificial intelligence
博客园 - 【当耐特】
U
Unit 42
大猫的无限游戏
大猫的无限游戏
Apple Machine Learning Research
Apple Machine Learning Research
S
SegmentFault 最新的问题
腾讯CDC
MongoDB | Blog
MongoDB | Blog
云风的 BLOG
云风的 BLOG
J
Java Code Geeks
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Martin Fowler
Martin Fowler
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News

博客园 - nathan

七个经典的绩效考核工具 听说搞IT的人都会玩游戏,你有吗[投票] 修改欄位屬性或是名稱 wow 宏 - nathan - 博客园 曝光形形色色的超载 用installshield 创建sql server数据库 sql创建、附加数据库的脚本参考 清除恶意RM文件的弹出窗口广告[轉] 100多种流氓插件集合 [导入]ShootSearch (基于dotlucene的c#开源搜索引擎) [导入]ShootSearch 中文分词组件(c#开源) 无时间限制使用野外恶魔的方法 加密與解密 进程性能计数器已禁用 解決方法 C#中控制IIS服務重啟 办公室定律(转) 破解dotnetCharting.WinForms 3.4 项目管理的内容 為什麼執行Application.Exit(),會停一段時間地關掉
简单实现Crystal Report的动态加载 lins(原作)
nathan · 2006-10-20 · via 博客园 - nathan

原文來自http://www.csdn.net/Develop/article/20%5C20463.shtm

     crystal reprot 为我们开发报表提供了很大的便利,但是它不能实现runtime时数据自定义,给开发带来了不完美。不过虽然我们不能runtime自定义数据,但我们还是可以实现runtime自定义加载报表。
       要实现自定义加载报表,要使用推模式报表生成。(拉模式我没有试过,哪位网友要是实现了可以告诉我:) )
       回顾一下推模式的操作过程,在利用生成报表的那一步中,我们选择空报表。这个时候在解决方案中生成一个report.rpt(假定是这个名字),但是我们在方案目录下,我们还可以看到一个同名的report.cs。这个文件就是我们这次讨论的关键。我们先来看看这个文件有什么。

namespace WebApp_Crystal_Dynametic {
using System;
using System.ComponentModel;
using CrystalDecisions.Shared;
using CrystalDecisions.ReportSource;
using CrystalDecisions.CrystalReports.Engine;

public class Report : ReportClass {

public Report() {
}

public override string ResourceName {
get {
return "Report.rpt";
}

}
……

       看到红色高亮的程序吗?当我们向report推数据的时候report类如何把数据绑定到合适报表中呢,就是靠这个代码了!既然如此,那么我们如果能够动态改变它的返回值就可以动态加载报表了,让我们来试试。下面是我修改后的代码:

namespace WebApp_Crystal_Dynametic {
using System;
using System.ComponentModel;
using CrystalDecisions.Shared;
using CrystalDecisions.ReportSource;
using CrystalDecisions.CrystalReports.Engine;

public class Report : ReportClass {

string resourcename = "Report.rpt";
public Report() {
}

public override string ResourceName {

get {
return resourcename;
}
set {
resourcename = value;
}

}
……

       好现在我们再新建几个不同的报表(都是推模式的),在程序中我添加了几个button,不同的button事件中加载不同的报表,并把不同的数据推向报表。程序编译运行通过(window server 2003 + vs.net 2003)。

       这样我们只要在程序中使用plugin模式,就可以在不改变源代码的情况下为程序添加新的报表文件。

-------------------------------------------------------------------------------------------
注:Report 的class必須與.rpt文件是同一個命名空間,否則,將會提示無法找到報表文件的信息.