Sub Report di Crystal Report dengan Method Push
Ada user yang bertanya bagaimana cara membuat sub report dimana data telah terbentuk tersebut menggunakan datatable / dataset.
Yup, Crystal report bisa melakukan hal tersebut dengan menggunakan Method Push dan untuk lebih jelasnya dapat di lihat pada contoh code sbb :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TestCrystalReport
{
public partial class Form1 : Form
{
private DataTable dtMaster;
private DataTable dtDetail;
public Form1()
{
InitializeComponent();
}
private void LoadData()
{
dtMaster = new DataTable("DataTable1");
DataRow dr;
dtMaster.Columns.Add("STOCK_CODE", typeof(string));
dtMaster.Columns.Add("STOCK_DESC", typeof(string));
dtMaster.Columns.Add("STOCK_VAL", typeof(System.Int32));
DataRow row = dtMaster.NewRow();
row["STOCK_CODE"] = "A000001";
row["STOCK_DESC"] = "STOCK A";
row["STOCK_VAL"] = "100";
dtMaster.Rows.Add(row);
row = dtMaster.NewRow();
row["STOCK_CODE"] = "A000002";
row["STOCK_DESC"] = "STOCK B";
row["STOCK_VAL"] = "200";
dtMaster.Rows.Add(row);
row = dtMaster.NewRow();
row["STOCK_CODE"] = "A000003";
row["STOCK_DESC"] = "STOCK C";
row["STOCK_VAL"] = "300";
dtMaster.Rows.Add(row);
row = dtMaster.NewRow();
row["STOCK_CODE"] = "A000004";
row["STOCK_DESC"] = "STOCK D";
row["STOCK_VAL"] = "400";
dtMaster.Rows.Add(row);
row = dtMaster.NewRow();
row["STOCK_CODE"] = "A000005";
row["STOCK_DESC"] = "STOCK E";
row["STOCK_VAL"] = "500";
dtMaster.Rows.Add(row);
dtDetail = new DataTable("DataTable2");
dtDetail.Columns.Add("STOCK_CODE", typeof(string));
dtDetail.Columns.Add("STOCK_BOM", typeof(string));
dtDetail.Columns.Add("QTY", typeof(System.Int32));
dr = dtDetail.NewRow();
dr["STOCK_CODE"] = "A000001";
dr["STOCK_BOM"] = "BOM1-A000001";
dr["QTY"] = 1;
dtDetail.Rows.Add(dr);
dr = dtDetail.NewRow();
dr["STOCK_CODE"] = "A000001";
dr["STOCK_BOM"] = "BOM1-A000001";
dr["QTY"] = 2;
dtDetail.Rows.Add(dr);
dr = dtDetail.NewRow();
dr["STOCK_CODE"] = "A000001";
dr["STOCK_BOM"] = "BOM2-A000001";
dr["QTY"] = 3;
dtDetail.Rows.Add(dr);
dr = dtDetail.NewRow();
dr["STOCK_CODE"] = "A000002";
dr["STOCK_BOM"] = "BOM1-A000002";
dr["QTY"] = 1000;
dtDetail.Rows.Add(dr);
dr = dtDetail.NewRow();
dr["STOCK_CODE"] = "A000002";
dr["STOCK_BOM"] = "BOM2-A000002";
dr["QTY"] = 2000;
dtDetail.Rows.Add(dr);
dr = dtDetail.NewRow();
dr["STOCK_CODE"] = "A000002";
dr["STOCK_BOM"] = "BOM3-A000002";
dr["QTY"] = 3000;
dtDetail.Rows.Add(dr);
dr = dtDetail.NewRow();
dr["STOCK_CODE"] = "A000002";
dr["STOCK_BOM"] = "BOM4-A000002";
dr["QTY"] = 4000;
dtDetail.Rows.Add(dr);
}
private void BindReport()
{
CrystalReport1 report = new CrystalReport1();
report.Database.Tables["DataTable1"].SetDataSource(dtMaster);
report.Subreports[0].Database.Tables["DataTable2"].SetDataSource(dtDetail);
crystalReportViewer1.ReportSource = report;
}
private void button1_Click(object sender, EventArgs e)
{
LoadData();
BindReport();
}
}
}
Untuk sample code nya bisa di click ini :
http://cid-a57ff57d3f450af3.skydrive.live.com/self.aspx/Public/TestCrystalReport.zip