昨天寫了系列的第二篇Devexpress XtraReports 系列 2 創建表格報表 。
今天我們來繼續系列 3 創建主從報表
首先我們來看看最后實現的效果。Demo最后附上。
開始吧。
第一步,建立一個WinForm窗體,從工具箱中拉入控件SimpleButton,DocumentViewer,SplitContainerControl,LabelControl,TextEdit,GroupControl,簡單布局(見效果圖)我就不多闡述了。
第二步,創建一個Devexpress XtraReport報表文件。如圖:
在報表中首先建立一個ReportHeader,如圖
然后添加一個從報表DetailReport:如圖
接着在ReportHeader 拉入一個XRLabel 修改Text屬性為:主從報表(至於字體大小屬性等修改,個人有各自喜好的字體大小,顏色,我就不多累贅介紹了。)
然后在Detail和DetailReport區分別拉入一個XRTable控件(XRTable默認三列)。根據字段需要添加刪除列數。
至此,報表布局也完成了。
第三步,創建數據源表。如圖:一個部門主表,一個人員從表,一對多的關系,一個部門下有多個人員。利用dept_id關聯。
第四步,讓我們來處理相對應的主從表關系綁定吧。
很簡單,效果就是要點擊顯示報表按鈕,讓數據源綁定到報表中。我們如何做呢?
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