根据官方回答:多列或多行(取决于当前的多栏设置)呈现数据的报表
这种报表是有用的,例如,当每个明细区都只显示少量数据、并且需要在一列的右侧打印下一个明细区时,这样就能充分利用整个页面的宽度,此外,当创建有相同内容的卡片或邮寄地址、并且需要在许多报表页面上打印大量相同尺寸的卡片时,多栏报表也是有用的。
场景:
我们有很多产品分别属于不同的类别,现在老板说要看看我们不同类别下都有什么产品。为了让老板更加一目了然,多栏报表就派上用场了,如图:也是该案例最后效果图,如果安装传统的table报表,那么产品名称(如:手镯1,2.3.4.5)会一直往下排而右边有一大片空间就是浪费的,老板看上去也风场费力,此时多栏报表也派上用场了
第一步
窗体布局
新建一个窗体,拉入控件SimpleButton,DocumentViewer,SplitContainerControl,LabelControl,TextEdit,GroupControl,无非就是设置空间Dock属性,还有字体Text属性等,简单布局我就不多阐述了。
第二步
创建一个Devexpress Xtrareport报表文件
新建报表头:即是上图中的ReportHeader,在报表空白区右键点击
b,新建产品类型分组头:即是上图中的GroupHeader(用于类别分组),在报表空白区右键点击
在GroupHeader区域拉入一个XRTable控件。
c,设置明细区一些属性。即是上图中的Detail区的属性
在Detail区域拉入一个XRLabel控件,用于绑定类别下的产品名称。
\我们需要获取绑定到报表中的数据源,怎么获取呢? 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; }
我们要把数据源绑定到报表的相对应的控件上,怎样绑定呢?
在报表文件里,修改其构造函数,用于后面点击按钮传过来的数据源。
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"); }
我们需要点击按钮把数据源绑定到报表中,如何做呢?
private void btnShowReport_Click(object sender, EventArgs e) { DataSet ds = BindRpt(); ManyColumnRpt Rpt = new ManyColumnRpt(ds); this.documentViewer1.DocumentSource = Rpt; Rpt.CreateDocument(); } 到此,我们就把一个多栏报表完成了。。