DevExpress.XtraReports如何动态运行时创建报表

DevExpress.XtraReports如何动态运⾏时创建报表
  很长时间也没接触报表了。之前很久⽤过⾦质打印通和⽔晶报表
  最近在看 Dev的报表发现讲Dev这套控件XtraReports内容⽅⾯的⽂章挺少的,现讲⼀下我是如何动态的创建报表。分享给⼤家
  XtraReports报表正常的做法:
  制作过程简单说有两步:
  第⼀步:画报表。报表中有⼀些带区:报表头,页头,明细,分组,页尾,报表尾等,(报表头、报表尾整个报表中只会加载⼀次,页头、页尾每⼀页都会加载⼀次,其他的就不说了。见图⽚)
  如图:报表头、报表尾整个报表中只会加载⼀次,页头、页尾每⼀页都会加载⼀次
  在这些带区中可以放控件,控件在Dev的左边控件栏可以拖拽上去,在属性视图中修改属性,跟WinForm或者WebForm拖拽控件做出⼀个窗体是类似的。-注意:现在这步画出的只是报表模板
如图:是⼀个Dev的报表设计器的窗体,已加⼊⼀些带区
  左侧是⼀些控件拖⼊控件可以设置控件的各种属性。
  报表设计好⽂件保存后是.repx 后缀类型的⽂件,和Winform的窗体保存的 Form1.cs ⽂件类似。在XtraReport中,每⼀个报表都是XtraReport或者其⼦类。如把XtraReport⽐做Winform。则同样的道理,所有的form都Form类的⼦类。Dev报表的所有控件都从XRControl继承,XRControl是继承于
System.ComponentModel.Component的。Winform的控件都继承于Control类。
  第⼆步:绑定数据源。XtraReport的⼀个实例 myXtraReport.DataSource = 你的数据源。
  这样做先得去设计报表,⾮常⿇烦,⽽且加⼊你有⼏百上上千张表表⼀⼀去设计就⾮常⿇烦。
  我这篇⽂章就是想不⽤去先画报表,直接就⽣成报表,即运⾏时⽣成报表。
  先看⼀下简单的直接就⽣成报表的效果
运⾏时显⽰⼀个数据表格中的数据交替换表格的颜⾊。  下⾯是代码
public Form1()
{
InitializeComponent();
this.button1.Click += (o, e) =>
{
XtraReport rpt = new XtraReport();// 建⽴报表实例
rpt.DataSource = FillDataset();//设置报表数据源
rpt.DataMember = ((DataSet)rpt.DataSource).Tables[0].TableName;
InitBands(rpt);//添加带区(Bands)
InitStyles(rpt);//添加Styles
InitDetailsBasedonXRTable(rpt);//⽤XRTable显⽰报表
rpt.ShowPreviewDialog();
};
莆田古谯楼
}
  初始化数据源
FillDataset
public DataSet FillDataset()
{
DataSet myDataSet = new DataSet();
myDataSet.DataSetName = "myDataSet";
DataTable table = new DataTable("Detail");
myDataSet.Tables.Add(table);
table.Columns.Add("Name", typeof(String));
table.Columns.Add("Address", typeof(String));
table.Columns.Add("Sex", typeof(String));
table.Columns.Add("Birthplace", typeof(String));
table.Columns.Add("Birthday", typeof(String));
table.Rows.Add(new object[] { "Zhang", "辽宁锦州", "⼥", "辽宁", "1983-XX-XX" });
table.Rows.Add(new object[] { "Wang", "⼴东深圳", "男", "辽宁", "1984-10-XX" });
table.Rows.Add(new object[] { "Li", "北京", "男", "北京", "1985-XX-XX" });
table.Rows.Add(new object[] { "Zhao", "上海", "⼥", "湖南", "1984-XX-XX" });
table.Rows.Add(new object[] { "Liu", "⼴东深圳", "⼥", "辽宁", "1985-2-XX" });
return myDataSet;
}
禤沛钧
InitBands
public void InitBands(XtraReport rpt)
{
DetailBand detail = new DetailBand();
PageHeaderBand pageHeader = new PageHeaderBand();
ReportFooterBand reportFooter = new ReportFooterBand();
detail.Height = 20;
reportFooter.Height = 380;
结构主义pageHeader.Height = 20;
rpt.Bands.AddRange(new DevExpress.XtraReports.UI.Band[] { detail, pageHeader, reportFooter });
}
  添加Styles
InitStyles
public void InitStyles(XtraReport rep)
甲基丙烯酸锌{
XRControlStyle oddStyle = new XRControlStyle();
XRControlStyle evenStyle = new XRControlStyle();
oddStyle.BackColor = Color.LightBlue;
oddStyle.StyleUsing.UseBackColor = true;
oddStyle.StyleUsing.UseBorders = false;
oddStyle.Name = "OddStyle";
evenStyle.BackColor = Color.LightPink;
evenStyle.StyleUsing.UseBackColor = true;
evenStyle.StyleUsing.UseBorders = false;
evenStyle.Name = "EvenStyle";
rep.StyleSheet.AddRange(new DevExpress.XtraReports.UI.XRControlStyle[] { oddStyle, evenStyle });
}
  ⽤XRTable显⽰报表
InitDetailsBasedonXRTable
public void InitDetailsBasedonXRTable(XtraReport rpt)
{
DataSet ds = ((DataSet)rpt.DataSource);
int colCount = ds.Tables[0].Columns.Count;
int colWidth = (rpt.PageWidth - (rpt.Margins.Left + rpt.Margins.Right)) / colCount;
// Create a table to represent headers
XRTable tableHeader = new XRTable();
tableHeader.Height = 20;
tableHeader.Width = (rpt.PageWidth - (rpt.Margins.Left + rpt.Margins.Right));
城市经济学XRTableRow headerRow = new XRTableRow();
headerRow.Width = tableHeader.Width;
tableHeader.Rows.Add(headerRow);
headerRow.BackColor = Color.Gray;
headerRow.ForeColor = Color.White;
// Create a table to display data
XRTable tableDetail = new XRTable();
tableDetail.Height = 20;
tableDetail.Width = (rpt.PageWidth - (rpt.Margins.Left + rpt.Margins.Right));
XRTableRow detailRow = new XRTableRow();
detailRow.Width = tableDetail.Width;
tableDetail.Rows.Add(detailRow);
tableDetail.EvenStyleName = "EvenStyle";
tableDetail.OddStyleName = "OddStyle";
// Create table cells, fill the header cells with text, bind the cells to data
for (int i = 0; i < colCount; i++)
{
XRTableCell headerCell = new XRTableCell();
headerCell.Width = colWidth;
headerCell.Text = ds.Tables[0].Columns[i].Caption;
XRTableCell detailCell = new XRTableCell();
detailCell.Width = colWidth;
detailCell.DataBindings.Add("Text", null, ds.Tables[0].Columns[i].Caption);
if (i == 0)
{
headerCell.Borders = DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top | DevExpress.XtraPrinting.BorderSide.Bottom;                    detailCell.Borders = DevExpress.XtraPrinting.BorderSide.Left | DevExpress.XtraPrinting.BorderSide.Top | DevExpress.XtraPrinting.BorderSide.Bottom;                }
else
headerCell.Borders = DevExpress.XtraPrinting.BorderSide.All;
detailCell.Borders = DevExpress.XtraPrinting.BorderSide.All;
}
// Place the cells into the corresponding tables
headerRow.Cells.Add(headerCell);
detailRow.Cells.Add(detailCell);
葛万银}
// Place the table onto a report's Detail band
rpt.Bands[BandKind.PageHeader].Controls.Add(tableHeader);
rpt.Bands[BandKind.Detail].Controls.Add(tableDetail);
}
  之后还会添加报表头和报表尾,页统计分组统计等。
  通过我给的代码相信⼤家添加报表头和报表尾,页统计分组统计也会模仿着动态加载出来。
  这篇⽂章通过⼏个⼩时修修改改的,终于觉得差不多了,决定要封版本了,(做的东西总觉得这⾥不满意那⾥还不满意,软件封版难啊)希望能给需要的⼈带来帮助!

本文发布于:2024-09-23 17:17:16,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/174509.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:IFIX报表
下一篇:SAP技术术语
标签:报表   控件   统计   属性   觉得   添加   窗体   设计
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议