[原創]Devexpress XtraReports 系列 3 創建主從報表


昨天寫了系列的第二篇Devexpress XtraReports 系列 2 創建表格報表

今天我們來繼續系列 3 創建主從報表

首先我們來看看最后實現的效果。Demo最后附上。

 QQ截圖20130828110806

開始吧。

第一步,建立一個WinForm窗體,從工具箱中拉入控件SimpleButton,DocumentViewer,SplitContainerControl,LabelControl,TextEdit,GroupControl,簡單布局(見效果圖)我就不多闡述了。

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

QQ截圖20130828112328

在報表中首先建立一個ReportHeader,如圖

在報表文件空白區域右鍵QQ圖片20130828112653

然后添加一個從報表DetailReport:如圖

QQ截圖20130828112813

接着在ReportHeader 拉入一個XRLabel 修改Text屬性為:主從報表(至於字體大小屬性等修改,個人有各自喜好的字體大小,顏色,我就不多累贅介紹了。)

然后在Detail和DetailReport區分別拉入一個XRTable控件(XRTable默認三列)。根據字段需要添加刪除列數。

至此,報表布局也完成了。

第三步,創建數據源表。如圖:一個部門主表,一個人員從表,一對多的關系,一個部門下有多個人員。利用dept_id關聯。

QQ圖片20130828113517 QQ截圖20130828113622

第四步,讓我們來處理相對應的主從表關系綁定吧。

很簡單,效果就是要點擊顯示報表按鈕,讓數據源綁定到報表中。我們如何做呢?

a,按鈕事件

private void btnShowReport_Click(object sender, EventArgs e)
{
    DataSet ds = BindRpt();
    MasterDetailRpt Rpt = new MasterDetailRpt(ds);//注意:修改我們新建的MasterDetailRpt報表文件的構造函數。讓其可以接收我們傳遞的數據源。
    this.documentViewer1.DocumentSource = Rpt;
    Rpt.CreateDocument();
}

 

b,獲取數據源,並設置兩個表主從關系。

private DataSet BindRpt()
   {

       DataSet ds = new DataSet();
       try
       {
           //連接數據源,給Rpt綁定數據源,包含兩個數據表
           //在示例中為了方便就不寫存儲過程了,(日常工作中存儲過程方便維護)
           SqlConnection con = new SqlConnection("Data Source=(local);Integrated Security=SSPI;Initial Catalog=ReportDeom");
           SqlDataAdapter adapter;
           con.Open();

           //表1
           SqlCommand cmd = new SqlCommand("SELECT * FROM Dept where dept_name=@dept_name OR @dept_name='' ", con);
           SqlParameter[] paras = new SqlParameter[]{
           new SqlParameter("@dept_name",txtdept_name.Text)
       };
           cmd.Parameters.AddRange(paras);
           adapter = new SqlDataAdapter(cmd);
           adapter.Fill(ds, "Dept");

           //表2
           SqlCommand cmd2 = new SqlCommand("select  * FROM  Users where dept_id in (select dept_id from Dept where dept_name=@dept_name OR @dept_name='')  ", con);
           SqlParameter[] paras2 = new SqlParameter[]{
           new SqlParameter("@dept_name",txtdept_name.Text)
       };
           cmd2.Parameters.AddRange(paras2);
           adapter = new SqlDataAdapter(cmd2);
           adapter.Fill(ds, "User");
           con.Close();

           //給數據集建立主外鍵關系(主從表)
           DataColumn ParentColumn = ds.Tables["Dept"].Columns["dept_id"];
           DataColumn ChildColumn = ds.Tables["User"].Columns["dept_id"];
           DataRelation Rel = new DataRelation("RelationColumn", ParentColumn, ChildColumn);
           ds.Relations.Add(Rel);
       }
       catch (Exception ex)
       {

           throw ex;
       }

       return ds;
   }

c,綁定數據到報表文件

public MasterDetailRpt(DataSet ds)
{
    InitializeComponent();
    //綁定主表
    this.DataSource = ds;
    this.DataMember = "Dept";
    this.xrTableCell3.DataBindings.Add("Text", ds, "Dept.dept_name");
    DetailReport.DataMember = "RelationColumn";
    //綁定從表
    DetailReport.DataSource = ds;
    this.xrTableCell1.DataBindings.Add("Text", ds, "RelationColumn.user_id");
    this.xrTableCell2.DataBindings.Add("Text", ds, "RelationColumn.username"); 
}

 

 

到此, 基於Devexpress XtraReport主從報表就完成了。

希望對初學者有點幫助。謝謝。

Demo(包括數據庫文件) :http://yunpan.cn/QXESD5YscCfkw  訪問密碼 b675


免責聲明!

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



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