水晶报表主表与子表数据动态绑定

发布日期:2012-09-13 17:40:51

首先创建数据集文件data.xsd


创建好主表以及子表后建立数据链接

 

最后是代码绑定


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using CrystalDecisions.Shared;

namespace SubReportDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // 创建主表与子表的数据源
            DataTable mainTable = new DataTable();
            mainTable.Columns.Add(new DataColumn("id", Type.GetType("System.Int32")));
            mainTable.Columns.Add(new DataColumn("name", Type.GetType("System.String")));
            for (int i = 0; i < 3; i++)
            {
                DataRow dr = mainTable.NewRow();
                dr["id"] = i + 1;
                dr["name"] = "大类" + (i + 1).ToString();
                mainTable.Rows.Add(dr);
            }

            DataTable subTable = new DataTable();
            subTable.Columns.Add(new DataColumn("id", Type.GetType("System.Int32")));
            subTable.Columns.Add(new DataColumn("name", Type.GetType("System.String")));
            subTable.Columns.Add(new DataColumn("fatherId", Type.GetType("System.Int32")));
            for (int i = 0; i < 9; i++)
            {
                DataRow dr = subTable.NewRow();
                dr["id"] = i + 1;
                dr["name"] = "小类" + (i + 1).ToString();
                if (i >= 6)
                    dr["fatherId"] = 3;
                else if (i >= 3)
                    dr["fatherId"] = 2;
                else
                    dr["fatherId"] = 1;
                subTable.Rows.Add(dr);
            }

            // 主表以及子表绑定两个DataTable数据源
            mainReport1.SetDataSource(mainTable);
            mainReport1.OpenSubreport("subReport").SetDataSource(subTable);

            // 传递参数
            // 主报表
            ParameterFields paramFields = new ParameterFields();
            ParameterField paramField = new ParameterField();
            paramField.ParameterFieldName = "作者";
            ParameterDiscreteValue discreteVal = new ParameterDiscreteValue();
            discreteVal.Value = "主报表参数:Julian.zhu";
            paramField.CurrentValues.Add(discreteVal);
            paramFields.Add(paramField);
            crystalReportViewer1.ParameterFieldInfo = paramFields;

            // 子报表
            ParameterValues values = new ParameterValues();
            ParameterDiscreteValue discreteVal1 = new ParameterDiscreteValue();
            discreteVal1.Value = "子报表参数:Julian.zhu";
            values.Add(discreteVal1);
            mainReport1.DataDefinition.ParameterFields["作者", "subReport"].ApplyCurrentValues(values);

            crystalReportViewer1.ReportSource = mainReport1;


        }

        private void mainReport1_InitReport(object sender, EventArgs e)
        {

        }


    }
}

 

点击下载vs2008创建的例子