昨天我們已經介紹了如何創建多欄報表,詳見:[原創]Devexpress XtraReports 系列 4 創建多欄報表
今天我們繼續我們的XtraReports系列。Demo和數據庫文件最后會附上。
今天的主題是:創建交叉報表
什么是交叉報表呢?
官方回答:交叉表報表是以交叉表形式呈現信息的報表。 交叉表 (或透視表) 類似於簡單的普通數據綁定表格,但是改為在單個表格中呈現多維的分層級的信息,並含有每行和每列的自動排序、計數、合計和累計。
依照慣例,我們先來看看我們最后實現的效果,如圖:
案例場景:某公司可能有產品1-12,分別屬於產品類別1-3,現在要統計這些產品都被客戶訂購了多少數量。
開始講解。
第一步:窗體布局。
新建一個WinForm窗體,,拉入第三方控件SimpleButton,DocumentViewer,SplitContainerControl,LabelControl,TextEdit,GroupControl,無非就是設置空間Dock屬性,還有字體Text屬性等,簡單布局我就不多闡述了。可以參考我該系列第一篇。
第二步:創建一個Devexpress XtraReport報表文件。如圖:
報表布局步驟如下:(不知道為什么我的設計器是中文的,英文的朋友找到相對應的就行了)
a,新建報表頭:即是上圖中的ReportHeader,在報表空白區右鍵點擊
b,在工具箱拖入一個XRPivotGrid控件,用來承載交叉報表所需數據源。
選中XRPivotGrid控件,然后按照下圖設置屬性
b,點擊下面的設計器,在彈出的列編輯器中,分別修改新增的三列的綁定字段屬性,還有顯示名稱。
c,那如何讓數據以交叉形式顯示呢?
我們還需要設置一個屬性,如圖:
第三步,准備數據源,如圖:一個產品類別字段category,一個產品名稱字段name,一個訂購數量字段orderamount。
第四步,一切准備就緒,接下來就來處理方法事件了。
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