[英]Legacy report application problems with autogenerate fields in runtime
我不知道以下代码段是否打算以这种方式工作,因为有时我们“作为开发人员”会尝试自动创建数据显示控件,在该控件中字段数不受控制且具有类似的数据绑定,因此在查看应用程序之前有些人离开了这个:
在ActiveReport_ReportStart()
事件下:
for (Ind = 1; Ind <=CM.Length; Ind++) {
if (Ind == 1) {
Left = ((Line)rpt.Sections["PageHeader"].Controls["lnH8"]).Left + 0.05f;
} else if (Ind == 2) {
Left = ((Line)rpt.Sections["PageHeader"].Controls["lnH9"]).Left + 0.05f;
} else if (Ind == 3) {
Left = ((Line)rpt.Sections["PageHeader"].Controls["lnH10"]).Left + 0.05f;
}
TextBox TB = new TextBox();
TB.Size = ((Label)rpt.Sections["PageHeader"].Controls["tbColorway1"]).Size;
TB.Font = ((Label)rpt.Sections["PageHeader"].Controls["tbColorway1"]).Font;
TB.Width = ((Label)rpt.Sections["PageHeader"].Controls["tbColorway1"]).Width;
TB.Height = ((Label)rpt.Sections["PageHeader"].Controls["tbColorway1"]).Height;
TB.VerticalAlignment = VerticalTextAlignment.Top;
TB.Location = new System.Drawing.PointF(Left, ((Label)rpt.Sections["PageHeader"].Controls["tbColorway1"]).Top);
TB.DataField = "ColorText" + Ind + ColorwayNumber;
rpt.Sections["Detail"].Controls.Add(TB);
预览时没有编译错误,也可以正确显示未自动生成的其他字段(ReporHeader,ReportFooter),但是恕我直言,我认为最好用详细信息部分中的子报表替换此机制,当然这些字段必须显示在报告的“详细信息”部分中。 无论如何,我希望看到一些建议,因为如果可以在运行时自动生成文本框或标签,我将不得不向老板解释为什么此代码不起作用,并且如果我必须使用子报表,我需要知道如何传递参数(至少我需要使用两个参数来为其生成另一个sql查询),以及将脚本放入其中的适当“事件”。
我发现最重要的问题是通过在运行时受sqlquery返回值限制的报表详细信息中添加多少字段/文本框来获取报表格式更改,例如:
详细信息字段绑定到SQL存储过程*
可以通过以下方式打印/显示报告:
//Report Init
Page 1 : |field 1|field 2|field 3|field 4| ------------------------------------------------------ row1 | valA1 | valA2 | valA3 | valA4 | ------------------------------------------------------ row2 | valB1 | valB2 | valB3 | valB4 | ------------------------------------------------------ row3 | valC1 | valC2 | valC3 | valC4 | ------------------------------------------------------ Page 2 : |field 1|field 2|field 3|field 4| ------------------------------------------------------ row1 | valA5 | valA6 | valA7 | valA8 | ------------------------------------------------------ row2 | valB5 | valB6 | ------------------------------------------------------ row3 ------------------------------------------------------ Page 3 : |field 1|field 2|field 3|field 4| ------------------------------------------------------ row1 | valA9 | valA10| ------------------------------------------------------ row2 ------------------------------------------------------ row3 ------------------------------------------------------
//End of Report
任何帮助将不胜感激
非常感谢
在运行时在报表上动态创建字段非常好。 确实需要在reportstart事件或更早的时间内(即在调用ActiveReport.Run之前)完成这些字段的创建。
但是,您可以放置相同的逻辑以在子报表中动态创建这些字段并也传递参数,但是一般而言,子报表会带来额外的开销(在大多数情况下,还会有额外的查询),因此除非有必要,否则我不会使用子报表引人注目的好处。 然而,在传递参数给子报表的演练在这里 。
在代码中唯一看起来可疑的是以下行:
TB.Location = new System.Drawing.PointF(Left, ((Label)rpt.Sections["PageHeader"].Controls["tbColorway1"]).Top);
您正在使用PageHeader中控件的Top
值,但是TB
在Detail部分中。 我可以理解重用Left值,但是重用Top值在不同部分之间并不一致(Top是从包含控件的部分顶部开始的垂直位置)
现在,听起来好像有时这些字段没有出现在报告中。 您可以验证一些事情来解决问题:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.