原創|其它|編輯:郝浩|2011-08-25 15:05:36.000|閱讀 3073 次
概述:很長時間也沒接觸報表了。之前很久用過金質打印通和水晶報表。最近在看 Dev的報表 XtraReports 現講一下我是如何動態的創建報表。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
很長時間也沒接觸報表了。之前很久用過金質打印通和水晶報表
最近在看 Dev的報表 XtraReports 現講一下我是如何動態的創建報表。
XtraReports報表正常的做法:
制作過程簡單說有兩步:
第一步:畫報表。報表中有一些帶區:報表頭,頁頭,明細,分組,頁尾,報表尾等,在這些容器中可以放控件,控件在Dev的左邊控件欄可以拖拽上去,在屬性視圖中修改屬性,跟WinForm或者WebForm拖拽控件做出一個窗體是類似的;-注意:現在畫出的只是報表模板
文件保存后是XtraReport.repx 文件,和Winform的 窗體的 Form1.cs 文件類似。
第二步:綁定數據源。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);
}< < <
之后還會添加報表頭和報表尾,頁統計分組統計等。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載