水晶报表简单制作步骤Word下载.docx
- 文档编号:22135179
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:22
- 大小:274.88KB
水晶报表简单制作步骤Word下载.docx
《水晶报表简单制作步骤Word下载.docx》由会员分享,可在线阅读,更多相关《水晶报表简单制作步骤Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
clsDyCrystalReportCore
{
///
<
summary>
将传入的datatable转换成报表模板所需要的datatable
数据全部转换为string
/summary>
param
name="
dt"
>
来源表<
/param>
returns>
报表模板所需要的datatable<
/returns>
public
DataTable
dtx(DataTable
dt)
DataSet1.BigTatableDataTable
dtx1
=
new
DataSet1.BigTatableDataTable();
object[]
obj
object[dt.Columns.Count];
//特别注意:
所选择的表的列的数目需<
=Bigtable的字段数目
//请自行填写保护代码
for
(int
i
0;
dt.Rows.Count
;
i++)
dtx1.Rows.Add(dtx1.NewRow());
j
dt.Columns.Count
j++)
dtx1.Rows[i][j]
dt.Rows[i][j].ToString();
}
}
return
dtx1;
就是来源表按照BigTable的结构写到BigTable里面去。
很简单的代码,但也是这个方案的核心。
第五步:
功能实现。
1
using
System;
2
System.Collections.Generic;
3
System.ComponentModel;
4
System.Data;
5
System.Text;
6
System.Windows.Forms;
7
CrystalDecisions.Shared;
8
CrystalDecisions.CrystalReports.Engine;
9
CrystalDecisions.Windows.Forms;
10
System.Data.OleDb;
11
namespace
DyCrystalReportDemo
12
13
partial
Form1
:
Form
14
15
Form1()
16
17
InitializeComponent();
18
19
20
private
void
button1_Click(object
sender,
EventArgs
e)
21
22
String
tblName
comboBox1.Text
23
connstr
"
Provider=Microsoft.Jet.OLEDB.4.0;
Data
Source="
+
System.Threading.Thread.GetDomain().BaseDirectory+
bbtcrall.mdb"
24
25
if
(tblName
==
)
26
27
MessageBox.Show("
请选择表名"
);
28
comboBox1.Focus();
29
return;
30
31
32
//打开数据库连接
33
34
dt1
DataTable();
35
dtx
36
OleDbDataAdapter
da
OleDbDataAdapter();
37
OleDbConnection
cn
OleDbConnection(connstr);
38
39
//打开选择的表(注意进行错误保护)
40
41
//如果要实现任意列,只要更改此处的SQL为具体的字段即可
42
OleDbDataAdapter("
SELECT
*
From
tblName,
cn);
43
da.Fill(dt1);
44
45
//处理ds1
46
clsDyCrystalReportCore
xCore
clsDyCrystalReportCore();
47
xCore.dtx(dt1);
48
49
ReportDocument
myReport
ReportDocument();
50
string
reportPath
System.Threading.Thread.GetDomain().BaseDirectory
crystalreport1.rpt"
51
myReport.Load(reportPath);
52
53
//绑定数据集,注意,一个报表用一个数据集。
54
55
myReport.SetDataSource(dtx);
56
57
crystalReportViewer1.ReportSource
myReport;
58
crystalReportViewer1.RefreshReport();
59
60
61
Form1_Load(object
62
{
63
comboBox1.Items.Add
("
Test1_1"
64
Test1_2"
65
66
67
2.SQL语句没有问题,表里也有数据,运行没提示错误,那位大哥帮我看下,不知道哪里出了问题
我写了个数据库的连接类(补充的字有限,还有个关闭和打开的连接没列出)
classDb
{
privateSqlConnectioncon;
privatestaticstringsconn=@"
连接SQL的字符串"
publicDataSetGetDataset(stringsql)//返回数据集
this.Open();
SqlCommandcmd=newSqlCommand(sql,con);
SqlDataAdaptersda=newSqlDataAdapter(cmd);
DataSetds=newDataSet();
sda.Fill(ds);
this.Close();
returnds;
}
在窗体的加载事件如下:
privatevoidForm1_Load(objectsender,EventArgse)//窗体加载
CrystalReport1rpMember=newCrystalReport1();
DataSetdszy=newDb().GetDataset("
SQL语句"
rpMember.SetDataSource(dszy);
crystalReportViewer1.ReportSource=rpMember;
你没填充数据怎么会有数据,你在数据集里拖出来的
表只是一个表结构
DataSet1ds=newDataSet1();
using(SqlConnectionconn=newSqlConnection(conString))
using(SqlDataAdapteradpt=newSqlDataAdapter("
select*fromMedicionType"
conn))
adpt.Fill(ds,"
表名,必须和你的数据集里拖出来的一样"
CrystalReport1cys=newCrystalReport1();
cys.SetDataSource(ds);
this.crystalReportViewer1.ReportSource=cys;
先说一下,操作对象,是依靠ReportDocument,
基础代码如下:
C#code
ReportDocumentmyReport=newReportDocument();
stringreportPath=Server.MapPath("
//PULL或PUSH方式的数据处理
//...
CrystalReportViewer1.ReportSource=myReport;
//然后,才是下文中的代码
关于水晶报表里的对象,我们直观的来看一下。
在模板空白处点邮件,选“插入”,鼠标放到“特殊字段”上,不要点,会出现如下菜单。
上面这些,都是报表对象或说是报表部件。
恩,这些我们都可以进行控制。
操作的基本语法是:
myReport.ReportDefinition.ReportObjects[对象序号].方法或属性;
//或
myReport.ReportDefinition.ReportObjects[对象名称].方法或属性;
对象序号在.Net的水晶报表版本里很难直观的看出来,一般他是按加入报表的顺序来排的
这个很难去记住。
有时候为了一些需要,在遍历的时候会用的到。
一般我们会用名称。
在对象上点右键,设置对象格式,
在出来的界面上就可以看到对象的名称
ReportObjects就是我们前面所指的报表对象集合,单一对象就是一个ReportObject
对于ReportObject来说,通用的属性有这样一些
一般我们可以控制对象的位置,通过控制左上角的坐标,也就是top和left属性。
这里说一下水晶报表的坐标系和计量单位。
水晶报表的坐标系,以每个节的左上角为原点,往下往右两个方向递增延展。
计量单位是缇,与厘米的换算关系是:
1厘米=567缇
所以在后面的代码中,你会看到我有这样的写法:
567*N其实也就是N厘米。
另外还有ObjectFormat下面的属性,可以控制对象的隐藏与显示,这个很实用吧,呵呵。
如抑制显示可以这样操作:
myReport.ReportDefinition.ReportObjects("
text4"
).ObjectFormat.EnableSuppress=true;
ReportObject是个通用对象,而其实际上又是一个具体的对象。
他有各自的特殊属性。
以文本框为例,他就会多出一些特性,比如Text属性,这样我们可以修改到文本框的内容。
//更改一个文本框的内容
TextObjectx;
x=(TextObject)myReport.ReportDefinition.ReportObjects["
];
x.Text="
我们的世界"
另外说一下,前面没提到的数据字段,也可以这样操作。
//调整字段的位置
FieldObjectfo;
fo=(FieldObject)myReport.ReportDefinition.ReportObjects["
NAME1"
fo.Height=567*3;
fo.Width=567*4;
fo.Left=567*1;
每个对象都有各自不同的属性,至于具体有多少对象,你可以按一下F2,
在CrystalDecisions.CrystalReports.Engine这个命名空间下,以Object结尾的,基本都是。
2:
子报表里对象的操作
子报表里的对象操作跟主报表是一样的,主要是要先找到这个子报表对象。
下面这个方法是不对的
SubreportObjectsubObj;
subObj=(SubreportObject)myReport.ReportDefinition.ReportObjects["
subreport1"
这个只会定义子报表在主报表内的特性,不能设置到子报表内的部件
myReport.Subreports[子报表序号].ReportDefinition.ReportObjects["
xx"
//序号从0开始计数,单纯子报表的一个序号
myReport.Subreports[子报表名称].ReportDefinition.ReportObjects["
注意这个名称不是我们在子报表上点右键看到的名称,而是我们在设计子报表时指定的子报表名称
TextObjectsubtext;
subtext=(TextObject)myReport.Subreports["
xyz"
].ReportDefinition.ReportObjects["
text3"
subtext.Text="
我是子报表里的内容哦"
3:
参数的基本操作
参数是程序与报表交互的一个重要媒介,本节只做一个基础说明,后续的章节中会进一步介绍。
新建一个参数p1
拖到模板上,会自动显示为?
pa1
代码中传递参数给报表的代码为:
SetParameterValue后面的几个参数依次为:
参数名称,参数值,子报表名称(如果是子报表参数的话)。
myReport.SetParameterValue("
pa1"
"
我是一个参数"
在子报表中建立一个新的参数spa1,注意xyz是子报表名称
spa1"
"
单纯从这个代码上来看,textbox和参数似乎可以等价
但是textbox一般只能用于显示一个字符串,但是参数则可以参与公式,过滤数据,控制对象的一些特性等等,用途更广泛一些。
为什么用String型呢?
在报表中添加这个Bigtable.将6个字段拖到详细资料节。
在winform上拖上一个combox,一个button,用默认名称即可。
实现原理上面的几步下来,有经验的朋友基本上看出来我们是要用PUSH模式来实现了。
从而达到“万能”的目的。
classclsDyCrystalReportCore
///<
///将传入的datatable转换成报表模板所需要的datatable
///数据全部转换为string
///<
paramname="
publicDataTabledtx(DataTabledt)
{DataSet1.BigTatableDataTabledtx1=newDataSet1.BigTatableDataTable();
object[]obj=newobject[dt.Columns.Count];
//特别注意:
for(inti=0;
i<
dt.Rows.Count;
i++)
{dtx1.Rows.Add(dtx1.NewRow());
for(intj=0;
j<
dt.Columns.Count;
j++)
{dtx1.Rows[i][j]=dt.Rows[i][j].ToString();
}returndtx1;
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Text;
usingSystem.Windows.Forms;
usingCrystalDecisions.Shared;
usingCrystalDecisions.CrystalReports.Engine;
usingCrystalDecisions.Windows.Forms;
usingSystem.Data.OleDb;
namespaceDyCrystalReportDemo
publicpartialclassForm1:
Form
publicForm1()
InitializeComponent();
privatevoidbutton1_Click(objectsender,EventArgse)
StringtblName=comboBox1.Text;
Stringconnstr="
DataSource="
+System.Threading.Thread.GetDomain().BaseDirectory+"
+"
if(tblName=="
MessageBox.Show("
comboBox1.Focus();
return;
//打开数据库连接
DataTabledt1=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 水晶 报表 简单 制作 步骤