水晶报表的生动生成功能

来源:互联网 发布:淘宝衣服试用报告范文 编辑:程序博客网 时间:2024/04/30 02:19

本人在前段时间研究了一下关于水晶报表生成的问题,因为没有碰过水晶报表,所以搜了很多内容,经过整合做出一个比较简单的水晶报表。(我是用VS2008做的)

首先应按“推模式”创建报表

1、设计DataSet

    

1)新建DataSet 

 

 

2)连接数据库、并把所需字段或表放入DataSet如图:

 

 

 

 

 

 

2、创建报表文件

1)新建报表文件

       

 

 

 

   

 

 

 

 

 

 

 

 并按完成(除非有其他设置)

 

 

 

 

 按完成后的报表样式 

 

 

 

2)新建公式字段(这个是动态生成列的关键)

 

创建空白的公式字段并保存

请根据你想动态生成字段的最大值来创建公式字段,如:我要在7个列中动态显示,即最大值为7,创建7个公式字段(切记,公式字段为空白。使用专家、编辑器,都可以,只要是空白的就行了)

 

 

 

把上表(报表)的内容删去,改为放入你自己刚才创建的公式字段(表头的名字我改成Text,方便区分)

 

 

对各列抑制显示,选择设置对象格式

 

 

 

选择最右端的 ("X-2")

 

 

 

输入如下代码(x代表1、2.... ,这个与自己起的名字有关)

 

if NextIsNull ({@FormulaFieldx})then
    true
else
    false

 

其他的如此类推

 

 

 

控制代码:

 

private void BindReport(string[]  fldArr)             //fldArr为显示列的名称数组
        {            

            DataSet ds = new DataSet();
            string conn = "DSN=xxxx;uid=xxxx;pwd=123456";
            CrystalReport  cr = new CrystalReport();
            string sql = "select " + str + " from table";
            ReportsService.ReportsService.FillDataSet(ds, "table", sql, conn);
            string[] fldArr = new string[length];
            for (int i = 0; i < fldArr.Length; i++)
            {
                // 将公式绑定到具体字段
                cr.DataDefinition.FormulaFields["FormulaField" + (i + 1).ToString()].Text = "{studentinfo." + fldArr[i] + "}";
                TextObject gettext = cr.ReportDefinition.ReportObjects["Text" + (i + 1).ToString()] as TextObject;
                gettext.Text = fldArr[i];

            }

            cr.SetDataSource(ds);
            CrystalReportViewer.ReportSource = cr;
        }

 

 

原创粉丝点击