2013年10月14日 星期一

[ASP.NET/ Crystal Report] 實作multiple table資料來源且table間無關聯的報表

說明:使用Crystal Reports實做一報表,繫結DB table為2個以上,且table之間無關聯,

作法:
1. 使用DataSet建立報表資料結構,新增DataTable以對應不同DB table,可不需建立DataTableAdapter方法
2. 新增Crystal Report檔,使用資料庫專家->ADO.NET資料集,選取建立的table結構
3. 將資料庫欄位拉至報表上
4. 新增一web page以呈現報表,拉一CrystalReportViewer控制項,依需求調整控制項面板
5. 在code behind繫結資料來源:

例:
//需import該dll
using CrystalDecisions.CrystalReports.Engine;

private ReportDocument rdReport;
protected void Page_Load(object sender, EventArgs e)
{
    rdReport = new ReportDocument();
    if  (!IsPostBack)
    {
        BindReport();
    }
}

private void BindReport()
{
    DataSet dsReport = GetReportData();
    string strRptName = Page.MapPath("ReportView.rpt");
     
    rdReport.Load(strRptName);
    rdReport.SetDataSource(dsReport);
    CrystalReportViewer1.ReportSource = rdReport;
    CrystalReportViewer1.DataBind();
}

private DataSet GetReportData()
{
     DataSet dsReturn = new DataSet();
     DataTable dtTemp = null;

     //此處以DataTable回傳各DB table資料,若table之間有關聯,可以join方式回傳即可,無關聯則取得各table資料,再依Step1建立之table name加進DataSet中即可
    dtTemp = 各sql回傳資料;
    dtTemp.TableName = "Step1中建立的table name";
    dsReturn.Tables.Add(dtTemp);

    return dsReturn;
}


參考資料:
http://csharp.net-informations.com/dataset/dataset-multiple-tables-sqlserver.htm
http://www.blueshop.com.tw/board/show.asp?subcde=BRD20110419171449396
http://www.functionx.com/csharp2/dataset/Lesson02b.htm

沒有留言:

張貼留言