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

推荐订阅源

WordPress大学
WordPress大学
O
OpenAI News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
Webroot Blog
Webroot Blog
GbyAI
GbyAI
S
SegmentFault 最新的问题
Cyberwarzone
Cyberwarzone
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
J
Java Code Geeks
Google DeepMind News
Google DeepMind News
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
博客园 - 【当耐特】
S
Secure Thoughts
酷 壳 – CoolShell
酷 壳 – CoolShell
AWS News Blog
AWS News Blog
Engineering at Meta
Engineering at Meta
S
Security Affairs
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
Hugging Face - Blog
Hugging Face - Blog
Google DeepMind News
Google DeepMind News
Spread Privacy
Spread Privacy
T
Threatpost
Forbes - Security
Forbes - Security
C
Cisco Blogs
Scott Helme
Scott Helme
Attack and Defense Labs
Attack and Defense Labs
Simon Willison's Weblog
Simon Willison's Weblog
腾讯CDC
The Last Watchdog
The Last Watchdog
Cloudbric
Cloudbric
Last Week in AI
Last Week in AI
Recorded Future
Recorded Future
小众软件
小众软件
V
Vulnerabilities – Threatpost
美团技术团队
人人都是产品经理
人人都是产品经理
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
Hacker News - Newest:
Hacker News - Newest: "LLM"
I
Intezer
月光博客
月光博客
C
Cyber Attacks, Cyber Crime and Cyber Security
博客园 - 司徒正美
C
Cybersecurity and Infrastructure Security Agency CISA
Martin Fowler
Martin Fowler
博客园 - 聂微东

博客园 - 木人(我现在不是老大)

ERP系统的专业化发展趋势 讨厌的real和float数据 Svcutil使用点滴 windows server2003企业版64位安装sql server2008企业版64位 读书笔记 UltraGrid(16) 水晶报表使用push模式(2) SQL SERVER2000存储过程调试 读书笔记 UltraGrid(15) 读书笔记 UltraGrid(14) 读书笔记 UltraGrid(12) 读书笔记 UltraGrid(11) 读书笔记 UltraGrid(10) 读书笔记 UltraGrid(9) 读书笔记 UltraGrid(8) 读书笔记 UltraGrid(7) 读书笔记 UltraGrid(6) 读书笔记 UltraGrid(5) 读书笔记 UltraGrid(4) 读书笔记 UltraGrid(3)
水晶报表使用push模式(1)
木人(我现在不是老大) · 2012-02-23 · via 博客园 - 木人(我现在不是老大)

1:数据建模。
在设计报表前,我们首先要根据展示的内容和查询的条件确定数据模型,比如我们要统计任意时间段每个班组的产量,那我们的模型可能设计如下:
WorkDate   Date
WorkTeam   char
WorkPcs    int
WorkSqr    float
这个实体的定义取决于报表要展示的内容以及过滤的条件。
比如要方便按月份来查询,可以增加:WorkMonth  char
至于其内容来源,有可能是直接取自表中、视图或查询语句,也可能来源于一个存储过程。
在设计的时候不用考虑其如何得来的。
2:建立XSD
1)通过vs.net建立数据集来,然后人工建立DataTable,从而生成XSD文件。
xsd文件名不重要,重要的是DataTable的名字,这个就是填充DataSet中DataTable的名字。
其生成的强类型的类文件对设计报表是没有用处的。
数据类型是一定要定义的,以方便在水晶报表设计中能对该列进行处理;
主键等约束,包括字符长度等,个人觉得没必要。除非该xsd文件要用于验证数据的有效性。
2)通过vs.net建立数据集,然后从服务器资源管理中拖拽表或视图来生成XSD;
这时工具会自动根据表或视图的定义来生成XSD及对应的类。
包括数据类型、长度以及主键等。
我们查看其代码文件,可以发现对应的类代码有点“异常复杂”,这就是所谓的强类型的dataset生成。
缺省是生成了TableAdapter的。这个实际上可以删除,以减少XSD文件的大小,大约变为原来的1/5。
查看XSD文件,可以发现对表的操作,如查询、插入、更新和删除等操作语句都体现在XSD中的。
3)通过vs.net建立数据集,增加一个查询,通过改查询来生成XSD.
4) 自己生成XSD,如:
string sql = "select * from " + tableName;
DataSet data = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sql, this._connectString);
data.Tables.Add(tableName);
da.FillSchema(data,SchemaType.Source,tableName);
data.WriteXml(fileName, XmlWriteMode.WriteSchema);
3:设计报表文件。
如使用Crystal Reports2008或者Crystal Reports for .NET4.0来设计.
在创建新连接中,选择Ado.net,然后选择对应的xsd文件,确定即可。
其余设计过程和直接连接数据库设计没有什么区别。
4.显示报表
ReportDocument rd = new ReportDocument();
rd.Load("Throughput.rpt");
DataSet data = new DataSet();
SqlConnection cnn = new SqlConnection(connectString);
SqlDataAdapter da = new SqlDataAdapter(selectSQL, cnn);
da.Fill(data, "Throughput");
rd.SetDataSource(data);
this.crystalReportViewer1.ReportSource = rd;
注意:fill中的表名必须和设计文件中的表名相同!

da.Fill(data);
rd.SetDataSource(data);
则不能正确展示报表的。

当然也可以使用这种方式!
da.Fill(data);
rd.SetDataSource(data.Tables[0]);