怎样使用水晶报表的推模式?

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;

Published At
Categories with Web编程
Tagged with
comments powered by Disqus