每个报表工具都号称自己拥有完善的API,但是大叔测试过如此多的报表开发工具,大多都将报表设计和报表分开的,报表查看器封装得太完整了,经常需要的动态报表功能都不能实现了。
在ActiveReports的官博上看到说他们能创建动态区段报表,步骤大概以下几步:
- 创建一个报表实例
- 动态的添加区段和控件
- 修改报表区段和控件的相关细节
- 给报表指派设置数据源
- 将报表绑定到数据源
下面将一个简单的示例代码分享
private void Form1_Load(object sender, EventArgs e)
{
rpt = new SectionReport();
//Adding Page Header/Footer sections
rpt.Sections.InsertPageHF();
rpt.Sections[0].BackColor = Color.LightGray;
//Adding Detail section
rpt.Sections.Insert(1, new Detail());
rpt.Sections[1].BackColor = Color.PeachPuff;
rpt.Sections[1].Height = 1.5f;
//Adding label to display first column's name
GrapeCity.ActiveReports.SectionReportModel.Label lblCategoryID = new GrapeCity.ActiveReports.SectionReportModel.Label();
lblCategoryID.Location = new PointF(0, 0.05F);
lblCategoryID.Text = "Category ID";
lblCategoryID.Alignment = GrapeCity.ActiveReports.Document.Section.TextAlignment.Center;
lblCategoryID.Font = new System.Drawing.Font("Arial", 10, FontStyle.Bold);
rpt.Sections[0].Controls.Add(lblCategoryID);
//Adding label to display second column's name
GrapeCity.ActiveReports.SectionReportModel.Label lblCategoryName = new GrapeCity.ActiveReports.SectionReportModel.Label();
lblCategoryName.Location = new PointF(1.459f, 0.05f);
lblCategoryName.Size = new SizeF(1.094f,0.2f);
lblCategoryName.Text = "Category Name";
lblCategoryName.Font = new System.Drawing.Font("Arial", 10, FontStyle.Bold);
rpt.Sections[0].Controls.Add(lblCategoryName);
//Adding label to display third column's name
GrapeCity.ActiveReports.SectionReportModel.Label lblDescription = new GrapeCity.ActiveReports.SectionReportModel.Label();
lblDescription.Location = new PointF(3.114f, 0.05f);
lblDescription.Text = "Description";
lblDescription.Font = new System.Drawing.Font("Arial", 10, FontStyle.Bold);
rpt.Sections[0].Controls.Add(lblDescription);
//Adding label to display fourth column's name
GrapeCity.ActiveReports.SectionReportModel.Label lblPicture = new GrapeCity.ActiveReports.SectionReportModel.Label();
lblPicture.Location = new PointF(5.219f, 0.05f);
lblPicture.Alignment = GrapeCity.ActiveReports.Document.Section.TextAlignment.Center;
lblPicture.Text = "Picture";
lblPicture.Font = new System.Drawing.Font("Arial", 10, FontStyle.Bold);
rpt.Sections[0].Controls.Add(lblPicture);
//Adding Textbox to display first column's records
GrapeCity.ActiveReports.SectionReportModel.TextBox txtCategoryID = new GrapeCity.ActiveReports.SectionReportModel.TextBox();
txtCategoryID.Location = new PointF(0,0);
txtCategoryID.Alignment = GrapeCity.ActiveReports.Document.Section.TextAlignment.Center;
rpt.Sections[1].Controls.Add(txtCategoryID);
//Adding Textbox to display second column's records
GrapeCity.ActiveReports.SectionReportModel.TextBox txtCategoryName = new GrapeCity.ActiveReports.SectionReportModel.TextBox();
txtCategoryName.Location = new PointF(1.459f,0);
rpt.Sections[1].Controls.Add(txtCategoryName);
//Adding Textbox to display third column's records
GrapeCity.ActiveReports.SectionReportModel.TextBox txtDescription = new GrapeCity.ActiveReports.SectionReportModel.TextBox();
txtDescription.Location = new PointF(3.114f,0);
rpt.Sections[1].Controls.Add(txtDescription);
//Adding Picture control to display image
GrapeCity.ActiveReports.SectionReportModel.Picture picture = new Picture();
picture.Location = new PointF(5.219f,0);
rpt.Sections[1].Controls.Add(picture);
// Setting report's data source
conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\stduser\Documents\ComponentOne Samples\ActiveReports Developer 7\Data\NWIND.mdb;Persist Security Info=False");
System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand("SELECT * FROM Categories", conn);
conn.Open();
reader = cmd.ExecuteReader();
rpt.DataSource = reader;
// Assigning DataField properties of controls in the detail section
txtCategoryID.DataField = "CategoryID";
txtCategoryName.DataField = "CategoryName";
txtDescription.DataField = "Description";
picture.DataField = "Picture";
reader.Close();
conn.Close();
}
在安装ActiveReports后,修改动态区段的时候用到以上代码,顺便给一个ActiveReports的 下载>> ,想要测试的下载了看看效果。