昨天我們完成了 [原創]Devexpress XtraReports 系列 3 創建主從報表
今天我們繼續學習新的一種報表模式:多欄報表。(Demo源碼,數據庫最后附上)
或許很多人會問什么是多欄報表。
根據官方回答是:以多個列或行 (取決於當前的多欄設置) 呈現數據的報表。
這種報表是有用的,例如,當每個明細區都只顯示少量數據、並且需要在一列的右側打印下一個明細區時,這樣就能充分利用整個頁面寬度。 此外,當創建有相同內容的 卡片或郵寄地址簽、並且需要在許多報表頁面上打印大量相同尺寸的卡片時,多欄報表也是有用的。
案例場景:我們有很多產品分別屬於不同類別,現在老板說要看看我們不同類別下都有什么產品。為了讓老板更加一目了然,多欄報表就派上用場了。如圖:也是該案例最后效果圖:如果按照傳統的Table報表,那么產品名稱(如:手鐲1,2,3,4,5)會一直往下排,而右邊有一大片空間是浪費的,老板看上去也非常費力。此時多欄報表就派上用場了。
開始講解。
第一步:窗體布局。
新建一個WinForm窗體,,拉入第三方控件SimpleButton,DocumentViewer,SplitContainerControl,LabelControl,TextEdit,GroupControl,無非就是設置空間Dock屬性,還有字體Text屬性等,簡單布局我就不多闡述了。可以參考我該系列第一篇。
第二步:創建一個Devexpress XtraReport報表文件。如圖:
報表布局步驟如下:(不知道為什么我的設計器是中文的,英文的朋友找到相對應的就行了)
a,新建報表頭:即是上圖中的ReportHeader,在報表空白區右鍵點擊
b,新建產品類型分組頭:即是上圖中的GroupHeader(用於類別分組),在報表空白區右鍵點擊
在GroupHeader區域拉入一個XRTable控件。
c,設置明細區一些屬性。即是上圖中的Detail區的屬性
在Detail區域拉入一個XRLabel控件,用於綁定類別下的產品名稱。
第三步:Demo數據,如圖
第四步,一切准備就緒,接下來就來處理方法事件了。
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 ManyColumnData 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, "ManyColumnRpt"); ;
con.Close();
}
catch (Exception ex)
{
throw ex;
}
return ds;
}
b,我們要把數據源綁定到報表的相對應的控件上,怎樣綁定呢?
在報表文件里,修改其構造函數,用於后面點擊按鈕傳過來的數據源。
public ManyColumnRpt(DataSet ds)
{
InitializeComponent();
this.DataSource = ds;
this.DataMember = "ManyColumnRpt";
this.xrTableCell1.DataBindings.Add("Text", ds, "category");
GroupField gf = new GroupField("category", XRColumnSortOrder.Ascending);//設置GroupHeader分組字段
((GroupHeaderBand)(this.FindControl("GroupHeader1", true))).GroupFields.Add(gf);//把分組字段添加進GroupHeader1
this.xrLabel2.DataBindings.Add("Text", ds, "name");
}c,我們需要點擊按鈕把數據源綁定到報表中,如何做呢?
private void btnShowReport_Click(object sender, EventArgs e)
{
DataSet ds = BindRpt();
ManyColumnRpt Rpt = new ManyColumnRpt(ds);
this.documentViewer1.DocumentSource = Rpt;
Rpt.CreateDocument();
}到此,我們就把一個多欄報表完成了。。
希望對大家有幫助。。。最后附上源碼以及數據庫文件
http://yunpan.cn/QXEibmsrxZp4f 訪問密碼 d86e