[原創]Devexpress XtraReports 系列 5 創建交叉報表


昨天我們已經介紹了如何創建多欄報表,詳見:[原創]Devexpress XtraReports 系列 4 創建多欄報表

今天我們繼續我們的XtraReports系列。Demo和數據庫文件最后會附上。

今天的主題是:創建交叉報表

什么是交叉報表呢?

官方回答:交叉表報表是以交叉表形式呈現信息的報表。 交叉表 (或透視表) 類似於簡單的普通數據綁定表格,但是改為在單個表格中呈現多維的分層級的信息,並含有每行和每列的自動排序、計數、合計和累計。

依照慣例,我們先來看看我們最后實現的效果,如圖:

案例場景:某公司可能有產品1-12,分別屬於產品類別1-3,現在要統計這些產品都被客戶訂購了多少數量。

QQ截圖20130829131215

開始講解。


第一步:窗體布局。
新建一個WinForm窗體,,拉入第三方控件SimpleButton,DocumentViewer,SplitContainerControl,LabelControl,TextEdit,GroupControl,無非就是設置空間Dock屬性,還有字體Text屬性等,簡單布局我就不多闡述了。可以參考我該系列第一篇。

 

第二步:創建一個Devexpress XtraReport報表文件。如圖:

報表布局步驟如下:(不知道為什么我的設計器是中文的,英文的朋友找到相對應的就行了)
a,新建報表頭:即是上圖中的ReportHeader,在報表空白區右鍵點擊

b,在工具箱拖入一個XRPivotGrid控件,用來承載交叉報表所需數據源。

選中XRPivotGrid控件,然后按照下圖設置屬性

QQ圖片20130829131910

b,點擊下面的設計器,在彈出的列編輯器中,分別修改新增的三列的綁定字段屬性,還有顯示名稱。

QQ截圖20130829132217

c,那如何讓數據以交叉形式顯示呢?

我們還需要設置一個屬性,如圖:

QQ截圖20130829134655

第三步,准備數據源,如圖:一個產品類別字段category,一個產品名稱字段name,一個訂購數量字段orderamount。

QQ截圖20130829134821

 

 

 

 

 

 

 

第四步,一切准備就緒,接下來就來處理方法事件了。

a,從數據庫中獲取綁定數據源

private DataSet BindRpt()
{
    DataSet ds = new DataSet();
    try
    {
        SqlConnection con = new SqlConnection("Data Source=(local);Integrated Security=SSPI;Initial Catalog=ReportDeom");
        SqlDataAdapter adapter;
        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT * FROM CrossRptData where category=@name OR @name='' ", con);
        SqlParameter[] paras = new SqlParameter[]{
            new SqlParameter("@name",txtName.Text.Trim())
        };
        cmd.Parameters.AddRange(paras);
        adapter = new SqlDataAdapter(cmd);
        adapter.Fill(ds, "CrossTableRpt"); ;
        con.Close();
    }
    catch (Exception ex)
    {
        throw ex;
    }
    return ds;
}

 

b,修改報表文件默認構造函數,讓其可以接收數據源並綁定

public CrossTableRpt(DataSet ds)
{
    InitializeComponent();
    this.xrPivotGrid1.DataSource = ds;
    //this.xrPivotGrid1.OptionsView.ShowColumnHeaders = false;//不顯示列頭
    //this.xrPivotGrid1.OptionsView.ShowDataHeaders = false;//不顯示數據頭

 

c,處理顯示報表按鈕事件。把數據源傳遞給報表,並展示出來。

private void btnShowReport_Click(object sender, EventArgs e)
{
    DataSet ds = BindRpt();
    CrossTableRpt Rpt = new CrossTableRpt(ds);
    this.documentViewer1.DocumentSource = Rpt;
    Rpt.CreateDocument();
}

到此,我們就把一個交叉報表完成了。。
希望對大家有幫助。。。最后附上源碼以及數據庫備份文件

http://yunpan.cn/QXeykYVDYnKyP  訪問密碼 b402


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM