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

推荐订阅源

G
Google Developers Blog
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
H
Hackread – Cybersecurity News, Data Breaches, AI and More
B
Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Help Net Security
B
Blog RSS Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
N
Netflix TechBlog - Medium
S
SegmentFault 最新的问题
The Cloudflare Blog
I
InfoQ
美团技术团队
博客园 - 三生石上(FineUI控件)
MyScale Blog
MyScale Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 司徒正美
L
LangChain Blog
A
About on SuperTechFans
T
The Blog of Author Tim Ferriss
Y
Y Combinator Blog

博客园 - 奇远

网络记事本 用google检索email 读注册表 - 奇远 - 博客园 Crystal Report 部署 按钮控件数组 读写xml - 奇远 - 博客园 vb.net发邮件 - 奇远 - 博客园 VB.NET程序只能启动一次 - 奇远 - 博客园 dataset遍历表中的数据 - 奇远 - 博客园 vb.net自定义纸张大小 - 奇远 - 博客园 SQL查询语句精华使用简要 vb.net事务处理 各种连接字符串设置 CREATE PROCEDURE 将数字串转换为中文金额字符串 中文转换成拼音函数 运行时动态添加和删除控件 VB类Class设计 VB读写注册表
怎样使用水晶报表的推模式?
奇远 · 2006-09-20 · via 博客园 - 奇远


 

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;