请问水晶报表推模式下可以绑定多个自定义dataset的么?

 我来答
琴闾丘以荷
2011-05-19 · TA获得超过355个赞
知道小有建树答主
回答量:623
采纳率:0%
帮助的人:0
展开全部
拉模式只需要你根据向导操作就可以得到数据绑定。
而推模式则要靠代码来实现数据绑定。
具体实现方法:
1.根据报表的结构字段,建立一个xsd文件,用来存放数据。

2.新建一个报表,注意建立的时候要浏览到该xsd文件,

建好后找到该报表的属性"自定义工具",把原来的

"crystaldecisions.vsdesigner.codegen.reportcodegenerator"

改为"crystaldecisions.vsshell.codegen.reportcodegenerator"

这样就会产生一个按照你报表名命名的zsmxb.cs文件,其实就是下面的类zsmxb

同时建立一个页面,把crystalreportviewer控件放到页面,

并且要在该页面文件的顶部申明一下报表的类,

public class fr_zsmxb : system.windows.forms.form
{
zsmxb crreportdocument;

.........

3.建立报表结构

dataset dss=new dataset();
datatable dt=new datatable("zsmxb");
dt.columns.add("cchbh",system.type.gettype("system.string"));
dt.columns.add("nglf",system.type.gettype("system.decimal"));
dt.columns.add("ncf",system.type.gettype("system.decimal"));
dt.columns.add("nqyf",system.type.gettype("system.decimal"));
dt.columns.add("nzsf",system.type.gettype("system.decimal"));
dt.columns.add("ntcf",system.type.gettype("system.decimal"));
dt.columns.add("ngz",system.type.gettype("system.decimal"));
dt.columns.add("nzjf",system.type.gettype("system.decimal"));
dt.columns.add("nylf",system.type.gettype("system.decimal"));
dt.columns.add("nwxf",system.type.gettype("system.decimal"));
dt.columns.add("nsy",system.type.gettype("system.decimal"));
dt.columns.add("nqtf",system.type.gettype("system.decimal"));
dt.columns.add("nxj",system.type.gettype("system.decimal"));
dss.tables.add(dt);

注意:这里的datatable dt=new datatable("zsmxb");这句中表名"zsmxb"要和你的xsd文件中的表名要一样,

同时,dt的字段名、类型,都要和xsd文件一样,否则回产生"查询引擎错误"。

4.为这个ds传入数据

for(int i=0;i<this.ds.tables["zsmxb"].rows.count;i++)
{
datarow dr=dt.newrow();
dr["cchbh"]=this.ds.tables["zsmxb"].rows[i]["cchbh"];
dr["nglf"]=this.ds.tables["zsmxb"].rows[i]["nglf"];
dr["ncf"]=this.ds.tables["zsmxb"].rows[i]["ncf"];
dr["nqyf"]=this.ds.tables["zsmxb"].rows[i]["nqyf"];
dr["nzsf"]=this.ds.tables["zsmxb"].rows[i]["nzsf"];
dr["ntcf"]=this.ds.tables["zsmxb"].rows[i]["ntcf"];
dr["ngz"]=this.ds.tables["zsmxb"].rows[i]["ngz"];
dr["nzjf"]=this.ds.tables["zsmxb"].rows[i]["nzjf"];
dr["nylf"]=0;
dr["nwxf"]=0;
dr["nsy"]=0;
dr["nqtf"]=this.ds.tables["zsmxb"].rows[i]["nqtf"];
dr["nxj"]=system.convert.todecimal(dr["nglf"].tostring())+system.convert.todecimal(dr["ncf"].tostring();

dt.rows.add(dr);
}

这里的ds是同过查询得到的,这里只是举个例子。

5.把得到的报表数据源dss绑定到水晶报表。

crreportdocument=new zsmxb();
crreportdocument.setdatasource(dss);
crystalreportviewer1.reportsource = crreportdocument;

记得使用二个命名空间
CrystalDecisions.Shared
CrystalDecisions.CrystalReports.Engine
Love兮月
2011-05-23 · TA获得超过189个赞
知道答主
回答量:119
采纳率:0%
帮助的人:64.9万
展开全部
你的问题问的还不是很明确。
这样跟你说
CrystalReportdocument可以Setdatasoucre只能有一个。
如果你想要绑定多个dataset,必须通过if....else来解决,就是说一个reportdocument当前只能有datasoucre
其实dataset本身就像一个小型的数据库,何必要绑定多个dataset
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式