[原創]Devexpress XtraReports 系列 4 創建多欄報表


昨天我們完成了 [原創]Devexpress XtraReports 系列 3 創建主從報表

今天我們繼續學習新的一種報表模式:多欄報表。(Demo源碼,數據庫最后附上)

或許很多人會問什么是多欄報表。

根據官方回答是:以多個列或行 (取決於當前的多欄設置) 呈現數據的報表。

這種報表是有用的,例如,當每個明細區都只顯示少量數據、並且需要在一列的右側打印下一個明細區時,這樣就能充分利用整個頁面寬度。 此外,當創建有相同內容的 卡片或郵寄地址簽、並且需要在許多報表頁面上打印大量相同尺寸的卡片時,多欄報表也是有用的。

案例場景:我們有很多產品分別屬於不同類別,現在老板說要看看我們不同類別下都有什么產品。為了讓老板更加一目了然,多欄報表就派上用場了。如圖:也是該案例最后效果圖:如果按照傳統的Table報表,那么產品名稱(如:手鐲1,2,3,4,5)會一直往下排,而右邊有一大片空間是浪費的,老板看上去也非常費力。此時多欄報表就派上用場了。

QQ截圖20130828155742

開始講解。

第一步:窗體布局。

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

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

QQ截圖20130828160519

報表布局步驟如下:(不知道為什么我的設計器是中文的,英文的朋友找到相對應的就行了)

a,新建報表頭:即是上圖中的ReportHeader,在報表空白區右鍵點擊

image

b,新建產品類型分組頭:即是上圖中的GroupHeader(用於類別分組),在報表空白區右鍵點擊

image

在GroupHeader區域拉入一個XRTable控件。

c,設置明細區一些屬性。即是上圖中的Detail區的屬性

QQ截圖20130828161523 

在Detail區域拉入一個XRLabel控件,用於綁定類別下的產品名稱。

第三步:Demo數據,如圖

QQ截圖20130828161803

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

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

 


免責聲明!

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



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