有效报告的用户控制

时间:2015-09-24 13:51:44

标签: c# activereports

我知道我可以使用Active Reports,但让我们留下它作为最后的手段。

我有一个用户控件,我所做的只是在OnPaint方法中绘制图形(因为这是我可以显示图形的唯一方法)。我知道Active Reports是静态的,但我希望它能画一次。相反,我只是得到了灰色的盒子。有没有办法实现这一目标,还是我不能直接在Active Reports中转换我的东西?我在运行绘制图形的代码后尝试暂停OnPaint方法,但这没有用。

2 个答案:

答案 0 :(得分:0)

ActiveReports支持托管.net组件。无需直接在AR表面上绘画。这不是一个理想的场景,但它应该工作。我们需要更多详细信息来诊断您的用户控件无法正常工作的原因。你把它放在哪个部分?是绑定还是静态图形?你应该知道AR在处理时绘制控件,它绑定控件然后将它们绘制成自己的格式(RDF),然后观察者只能理解这种格式(把它想象成一张纸)。这意味着您需要将控件放在报表上并让它呈现它,而不是尝试在查看器中呈现它。

无论如何,有关您的控件和您使用它的报告的更多详细信息都会有所帮助。请通过activereports.support@grapecity.com与我们联系,我们会尽力提供帮助。

感谢 http://activereports.grapecity.com

答案 1 :(得分:0)

在与GrapeCity合作之后,我在完成这3项更改后能够让它正常工作(我确定它只是最后一项更改):

  1. 切换为从Control而不是UserControl继承
  2. 覆盖OnPaint方法,而不是仅订阅Paint事件
  3. 使用了PaintEventArg e e.Graphics而不是this.CreateGraphics()
  4. 然后在报告中将其全部声明为:

     private void SectionReport1_ReportStart(object sender, EventArgs e)
        {
            GrapeCity.ActiveReports.SectionReportModel.CustomControl cc;
            MyControl myc = new MyControl();           
            cc = new GrapeCity.ActiveReports.SectionReportModel.CustomControl(myc.GetType());
            cc.Location = new PointF(1f, 1f);
            cc.Size = new SizeF(4f, 4f);            
            this.detail.Controls.Add(cc);
        }
    
相关问题