ActiveReports区域报表中插入chart,并非绑定绘制曲线的问题
本帖最后由 blackpeony85 于 2017-6-20 14:38 编辑用VS2013做Winforms开发,在工程中添加了一个ActiveReports10 Section Report(code-based)报表
并且在报表页面中插入了一个chart,因为绘制图表的数据是程序中计算出的一组值,所以chart控件中的曲线坐标不是从数据库中读取。
自己写了代码,给chart控件的Series绑定坐标值
srp.chartControl1.Series.Points.AddRange(GetDglCharSeriesPoint(float[] aglData, float flowPos));
void GrapeCity.ActiveReports.Chart.DataPoint GetDglCharSeriesPoint(float[] aglData, float flowPos)
{
GrapeCity.ActiveReports.Chart.DataPoint[] ps = new GrapeCity.ActiveReports.Chart.DataPoint;
for(int i = 0; i <samplecount;i++ )
{
ps = new GrapeCity.ActiveReports.Chart.DataPoint(((double)i / samplerate * 1000).ToString("0.0"), new GrapeCity.ActiveReports.Chart.DoubleArray((aglData + flowPos).ToString()), false);
}
return ps;
}
这样的话就可以在chart中绘制出自己想要的曲线。并且这种方法可以成功实现。因为数据量较大,绘制曲线速度特别慢,并且是不是报错一个错误:
为了防止图片不显示,错误明细:
System.OutOfMemoryException: 引发类型为“System.OutOfMemoryException”的异常。
在 System.Attribute.InternalGetCustomAttributes(PropertyInfo element, Type type, Boolean inherit)
在 System.Attribute.GetCustomAttributes(MemberInfo element, Type type, Boolean inherit)
在 System.Attribute.GetCustomAttribute(MemberInfo element, Type attributeType, Boolean inherit)
在 GrapeCity.ActiveReports.Chart.Item.ToXml(String nodeName, GraphXmlSerializationContext context)
在 GrapeCity.ActiveReports.Chart.DataPoint.ToXml(String nodeName, GraphXmlSerializationContext context)
在 GrapeCity.ActiveReports.Chart.Item.#VDC(String nodeName, GraphXmlSerializationContext context)
在 #CDC.#KU.ToXml(Object obj, String nodeName, GraphXmlSerializationContext context)
在 #CDC.#KU.ToXml(Object obj, String nodeName, GraphXmlSerializationContext context)
在 GrapeCity.ActiveReports.Chart.Item.ToXml(String nodeName, GraphXmlSerializationContext context)
在 GrapeCity.ActiveReports.Chart.Item.#VDC(String nodeName, GraphXmlSerializationContext context)
在 #CDC.#KU.ToXml(Object obj, String nodeName, GraphXmlSerializationContext context)
在 #CDC.#KU.ToXml(Object obj, String nodeName, GraphXmlSerializationContext context)
在 GrapeCity.ActiveReports.Chart.Exchange.Persistence.ToXml(SharpGraph sharpChartControl, XmlElement rootElement, Boolean includeData)
在 GrapeCity.ActiveReports.Chart.SharpGraph.QuickSave(BinaryWriter binWriter)
在 GrapeCity.ActiveReports.SectionReportModel.ChartControl.QuickSave(BinaryWriter binWriter)
在 GrapeCity.ActiveReports.SectionReportModel.ARControl.#MYA(BinaryWriter binWriter)
在 GrapeCity.ActiveReports.SectionReportModel.Section.#jBb(Stream stream)
在 GrapeCity.ActiveReports.SectionReportModel.Section.#gBb()
在 #sxA.#mqb.#LDb()
在 #sxA.#mqb.#SDb(Section section, Int32 insPos)
在 #sxA.#vqb.#vEb()
在 #sxA.#vqb.#bZA(Page newPage, Single left, Single top, Single right, Single bottom, UInt32 flags, UInt32& status)
在 GrapeCity.ActiveReports.SectionReport.#4yb()
在 GrapeCity.ActiveReports.SectionReport.Run(Boolean syncDocument)
在 GrapeCity.ActiveReports.SectionReport.Run()
在 GrapeCity.ActiveReports.Viewer.Win.Rpx.RpxReport.LoadDocument(SectionDocument document)
在 GrapeCity.ActiveReports.Viewer.Win.Rdf.RdfDocumentReportBase.<>c__DisplayClass11.#7yz()
在 GrapeCity.ActiveReports.Viewer.Win.AsyncLoader.<>c__DisplayClass7.#cAz(Object param0, DoWorkEventArgs param1)
在 System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
在 System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
不知道这种非绑定的方式绘制曲线是否正确,速度是否还能提高,异常错误什么原因?
内存溢出问题,数据量过大导致耗费内存较多,您如果要计算之后赋值,可以尝试在SQL 语句处理完计算后,为Chart赋值。
Lenka.Guo 发表于 2017-6-20 18:21
内存溢出问题,数据量过大导致耗费内存较多,您如果要计算之后赋值,可以尝试在SQL 语句处理完计算后,为Ch ...
数据量确实很大,大概数组的长度有时大到几十万,没有用SQL语句,这个数据是采集后以文件的形式存储在磁盘上的。数据回放时,直接从文件中读取,并且需要绘制成曲线。那么请问,这个数据量有什么限制?我这种大数据量去chart中绘制曲线的。还有什么更好的方式? 本帖最后由 Lenka.Guo 于 2017-6-21 15:59 编辑
您的数据点如果只能通过文件获取,而且再加处理,同时加载十几万条的数据,很容易造成内存溢出,您可以考虑使用catcheTODisk
C# private void viewer1_Load(object sender, System.EventArgs e)
{
rptDocument rpt = new rptDocument();
rpt.Document.CacheToDisk = true;
rpt.Document.CacheToDiskLocation = "C:\\Temp";
rpt.Run();
viewer1.Document=rpt.Document;
}
Lenka.Guo 发表于 2017-6-21 15:49
您的数据点如果只能通过文件获取,而且再加处理,同时加载十几万条的数据,很容易造成内存溢出,您可以考虑 ...
你好,用了你的这种方法,试了一组值,数组长度175501(这还不是最大的长度),依旧报内存溢出的错误。而且绘制曲线的速度非常非常的慢。在利用ActiveReports生成报表之前,我在界面上也有绘制曲线的功能,用的时一个叫zedgraph的绘图控件,这个绘图控件就是数组长度好像不限制。请问,在我们报表中利用chart绘制曲线还有什么更好的方法吗? 您好,
因为17万条数据确实过量,所以这边没有更好的方法提供给您,只能建议 设置一定的间隔来绘制图表,而不是逐个点来绘制。
如果您需要绘制大量的图表数据,还是建议采用专业的图表控件来完成。
Lenka.Guo 发表于 2017-6-22 11:28
您好,
因为17万条数据确实过量,所以这边没有更好的方法提供给您,只能建议 设置一定的间隔来绘制图表, ...
软件主界面上就用了专业的图表控件zedgraph,绘制点过多的曲线没有问题的,但是现在报表中也想要显示。 之前电话沟通的,将数据整合为DataTable ,为图表绑定字段,如果您测试完成后,仍不能解决您的问题,AR可能无法满足您的需求。
Lenka.Guo 发表于 2017-6-22 15:10
之前电话沟通的,将数据整合为DataTable ,为图表绑定字段,如果您测试完成后,仍不能解决您的问题,AR可能 ...
能不能发一个图表绑定DataTable的示例? 图表控件使用视频:http://gcdn.gcpowertools.com.cn/forum.php?mod=viewthread&tid=24603&extra=page%3D1
动态绑定上数据源:
http://blog.gcpowertools.com.cn/post/ActiveReports_DataSource_RunTime.aspx
页:
[1]
2