c#水晶報表總結

來源:互聯網
上載者:User

1,水晶報表從資料庫中讀取的資料,當欄位內容比較長時,很影響美觀,需要設定它為自動換行來顯示。

2.開啟欄位的“設定對象格式”屬性,將其“公用”標籤下的“可以擴大屬性選上,*該設定可以使邊框自適應寬度
3.開啟節專家,將詳細資料中的“延伸到後續節”選中,如果有多個節點的話可以把多個節點全部選中;
4.將報表中線條控制項的“設定對象格式”中“列印時擴充到節的底部”屬性勾選上,這樣線條也會根據每行的資料高度自動向下移動。

 

1,建立dataset.xsd 增加表,然後在表中增加若干列

2,增加水晶報表,畫表格,將dataset中的列顯示到水晶報表中,並增加參數,(p1.p2.p3.p4.p5)

3 通過代碼將datatable轉換為xml,dataset

using CrystalDecisions.CrystalReports.Engine;using DbHelper;using Productsys;using System;using System.Data;using System.Data.OleDb;using System.Windows.Forms;class clsDyCrystalReportCore{    /// <summary>    /// 將傳入的datatable轉換成報表範本所需要的datatable    /// 資料全部轉換為string    /// </summary>    /// <param name="dt">來源表</param>    /// <returns>報表範本所需要的datatable</returns>    public DataTable dtx(DataTable dt)    {        BigTable.TableModeDataTable dtx1 = new BigTable.TableModeDataTable();        object[] obj = new object[dt.Columns.Count];        //特別注意:所選擇的表的列的數目需<=Bigtable的欄位數目        //請自行填防寫保護代碼        for (int i = 0; i < dt.Rows.Count; i++)        {            dtx1.Rows.Add(dtx1.NewRow());            for (int j = 0; j < dt.Columns.Count; j++)            {                dtx1.Rows[i][j] = dt.Rows[i][j].ToString();            }        }        return dtx1;    }    /// <summary>    /// 擷取ReportDocument    /// 使用擷取到的對象對Reportview設定    /// crystalReportViewer1.ReportSource = myReport;    /// crystalReportViewer1.RefreshReport();    ///     /// </summary>    /// <param name="titile">表標題</param>    /// <param name="dtSource">資料來源</param>    /// <returns></returns>    public ReportDocument getReportSource(string titile, DataTable dtSource)    {        DataTable dt1 = dtSource;        DataTable dtx = new DataTable();        //處理ds1        clsDyCrystalReportCore xCore = new clsDyCrystalReportCore();        dtx = xCore.dtx(dt1);        ReportDocument myReport = new ReportDocument();        string reportPath = System.Threading.Thread.GetDomain().BaseDirectory + @"/Resource/TimeReport.rpt";        myReport.Load(reportPath);        //綁定資料集,注意,一個報表用一個資料集。        myReport.SetDataSource(dtx);        //擷取列數        int cols = dt1.Columns.Count;        if (cols >= 9)        {            //設定參數,即表頭            for (int i = 1; i <= cols; i++)            {                if (i <= cols) //dt1.Columns[i-1].ColumnName                    myReport.SetParameterValue("p" + i.ToString(), dt1.Columns[i - 1].ColumnName);                else                    //注意,這個不能省,一定要給沒用到的參數一個空值                    myReport.SetParameterValue("p" + i.ToString(), "");            }            myReport.SetParameterValue("titile", titile);        }        else        {            for (int i = 1; i <= 9; i++)            {                if (i <= cols) //dt1.Columns[i-1].ColumnName                    myReport.SetParameterValue("p" + i.ToString(), dt1.Columns[i - 1].ColumnName);                else                    //注意,這個不能省,一定要給沒用到的參數一個空值                    myReport.SetParameterValue("p" + i.ToString(), "");            }                      myReport.SetParameterValue("titile", titile);        }        return myReport;    }}
            //控制項調用方法            clsDyCrystalReportCore cls = new clsDyCrystalReportCore();            ReportDocument rd = cls.getReportSource(reportname,source);            crystalReportViewer1.ReportSource = rd;

  

以上方法是通過1個dataset.xsd來完成多個報表的列印,

 

下面是自己通過抽象工廠來做的一個調用多個模板的方法

           //直接通過datatable顯示到 crastalReportViewer1中           string sqlStr="SELECT * FROM USERINFO";
DataTable dt = DbHelper.DbHelperSQL.DataQuery(sqlStr).Tables[0];
            ReportClass reportClass = ReportFactory.getInstance(reportname);
            reportClass.SetDataSource(dt);// 設定資料來源            crystalReportViewer1.ReportSource = reportClass;

using CrystalDecisions.CrystalReports.Engine;using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Productsys.Class{    /// <summary>    /// 使用原廠模式對報表進行初始化    /// </summary>    class ReportFactory    {        private ReportFactory()        {}        public static ReportClass getInstance(string reportname)        {            return (ReportClass)Activator.CreateInstance(Type.GetType(reportname));         }    }}

  

什麼push和pull的分不清,反正就是一個通過xsd一個不通過xsd檔案進行顯示的。。。。。。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.