fastreport 动态图表

laty_cathy 2010-12-20 05:16:06
大家好:
如何在fastreport 报表中动态生成Bar.假如在数据库中,有一张表A.
要在程序中动态生成曲线图。因为表A的字段不固定,可能还会有地理、化学、生物等字段.
请问大家有什么好的方法来实现:
详情见下图:

我现在可以用Delphi 自带的DBChart控件来实现。详细代码如下:

procedure TForm1.FormShow(Sender: TObject);
var
Series1,Series2: TLineSeries;
i:integer;
TestArr: array of TLineSeries;
begin
ADOQUERY2.Active :=TRUE;
SetLength(TestArr, ADOQuery2.FieldCount);
DBChart1.FreeAllSeries;
for i :=0 to ADOQuery2.FieldCount-1 do
begin
if i< ADOQuery2.FieldCount-1 then
begin
TestArr[i]:= TLineSeries.Create(nil);
TestArr[i].ParentChart:=self.DBChart1;
TestArr[i].Marks.Visible:=False;
TestArr[i].DataSource:=ADOQUERY2;
TestArr[i].YValues.ValueSource:=ADOQUERY2.Fields[i+1].FieldName;
TestArr[i].XLabelsSource:=ADOQUERY2.Fields[0].FieldName;
TestArr[i].Title :=ADOQUERY2.Fields[i+1].FieldName;
end;
end;
DBChart1.Repaint;
end;
但我想用Fastreport自带的控件TfrxChartView控件,但总不能实现动态增加Series功能。请高手指点如何动态生成曲线图表。
thanks
...全文
516 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
laty_cathy 2010-12-23
  • 打赏
  • 举报
回复
难道就没有高手能解决这个问题吗?
laty_cathy 2010-12-20
  • 打赏
  • 举报
回复
改为如下代码还是不行。请问高手如何解决这个问题:
procedure TForm1.frxReport2BeforePrint(Sender: TfrxReportComponent);
var
i:integer;
begin
if Sender is TfrxChartView then
begin
TfrxChartView(frxReport2.FindObject('Chart1')).SeriesData.Clear;
for i :=0 to adoquery2.FieldCount-1 do
begin
if i< ADOQuery2.FieldCount-1 then
begin
TfrxChartView(frxReport2.FindObject('Chart1')).SeriesData.Add.DataSet := frxDBDataset1;
TfrxChartView(frxReport2.FindObject('Chart1')).SeriesData.ADD.XType :=xtText;
TfrxChartView(frxReport2.FindObject('Chart1')).SeriesData.ADD.DataType :=dtDBData;
TfrxChartView(frxReport2.FindObject('Chart1')).SeriesData.ADD.SortOrder :=soNone;
TfrxChartView(frxReport2.FindObject('Chart1')).SeriesData.ADD.XSource :=ADOQUERY2.Fields[0].FieldName;
TfrxChartView(frxReport2.FindObject('Chart1')).SeriesData.ADD.YSource :=ADOQUERY2.Fields[i+1].FieldName;
end;
end;
TfrxChartView(frxReport2.FindObject('Chart1')).Chart.Repaint;
end;

end;
laty_cathy 2010-12-20
  • 打赏
  • 举报
回复
dbmh 您好:
按您好的方法写下了如下代码:但会出现 list index out of bound(0)的错误。不知道错误出在那里。
procedure TForm1.frxReport2BeforePrint(Sender: TfrxReportComponent);
var
myChart: TfrxChartView;
i:integer;
cc:TfrxSeriesItem;
aa:TfrxSeriesXtype;
bb:TChartSeries;
begin
if Sender is TfrxChartView then
begin
myChart:=(frxReport2.FindObject('Chart1') as TfrxChartView);
with mychart do
begin
mychart.ClearSeries;
for i :=0 to adoquery2.FieldCount-1 do
begin
TfrxChartView(frxReport2.FindObject('Chart1')).SeriesData.Add.DataSet := frxDBDataset1;
TfrxChartView(frxReport2.FindObject('Chart1')).SeriesData.ADD.XType :=xtText;
TfrxChartView(frxReport2.FindObject('Chart1')).SeriesData.ADD.DataType :=dtDBData;
TfrxChartView(frxReport2.FindObject('Chart1')).SeriesData.ADD.SortOrder :=soNone;
TfrxChartView(frxReport2.FindObject('Chart1')).SeriesData.ADD.XSource :='name';
TfrxChartView(frxReport2.FindObject('Chart1')).SeriesData.ADD.YSource :='math';
end;
mychart.Chart.Repaint;
end;
end;
end;
bdmh 2010-12-20
  • 打赏
  • 举报
回复
TfrxChartView(frReport1.FindObject('Chart1')).SeriesData.Add,自己研究一下他的添加
关于FastReport的说明 FastReport是高弹性的报表设计器,用于报表的数据可以从任何类型的数据源获取,包含字符列表,BDE数据库,ADO数据源(不使用BDE),Interbase(使用IBO),Pascal数组和记录,以及一些不常用的数据源。 整个FastReport系统是用Delphi的Pascal编写的。FastReport不需要动态链接库,但需在你的项目中占用大约400kb(Delphi 5)。如果你想最终用户拥有设计能力,这将在你的.EXE中增加大约500kb。虽然这看上去比较大,但这只是其它设计的几分之一。你同样应该考虑到FastReport不仅仅只是包含最终用户更改报表设计的能力,还能够适应查询和数据库的变化。FastReport还包含自己的脚本语言,让应用程序和最终用户能够更容易地改变报表。如果你的大部分应用使用FastReport,你可以简单地配置FastReport BPL(大约1400kb)而所有你的应用程序只需要保留很少的一部分。 你可以发现FastReport有一个非常吸引人的用户界面,使用最新的用户界面组件,例如可停靠的工具栏。你的最终用户将会非常愿意使用这个设计器,只需使用鼠标就可以创建大多数报表。 FastReport是名副其实的快速报表:较其它一些Delphi报表设计器而言,你可以发现没有什么可以接近于它的开发速度。报表预览窗口一直是大多数报表设计器的弱点,高品质的外观,赋于你的应用程序非常专业的用户界面。 FastReport是一个已经拥有三年历史的非常成熟的报表设计器,成长使它拥有其它Delphi报表设计器所不能相比的诸多先进特性。 FastReport的历史 FastReport应运而生。当我在1997年开发一个工资系统时,我寻找周围的报表设计器能够让我非常简单地创建报表,而且能够在运行时编辑报表。可是,那时没有一个免费组件是我所需要的。这样,我就想创建自己的报表设计器,于是FastReport诞生了。 FastReport的基本思想来源于Windows版的“1S-Bookkeeping”6.0,因此报表的基本元素是包含多行文本的矩形。这些文本既包含标准文本又包含变量。变量,像数据字段,用方括号突出显示。报表生成器的第一个版本仅支持一个区域,但它允许创建多层报表。它还不是一个组件,只是一些单元的集合。 后来,在1998年,报表生成器变成一个完整的Delphi组件。在这时,它命名为“FastReport”,并提供增强的函数功能。现在,FastReport是一个完整的,产品化的可视化报表生成器。它包含以下的特点: l 构建报表的生成器,也可以在运行时使用(重要的是用于最终用户报表的更改!)。 l 类似于MS Word的打印预览。 l 直接编译在Delphi EXE中,不需要动态链接库。 l 支持JPEG(使用Delphi类库)和GIF(使用RX类库)。 l 拥有比QuickReport1执行更快速的性能。 l 简洁,纯Delphi代码,比QR3有更小的设计器。 l 类似QuickReportReportBuild的强大的区域导向报表生成器。 l 包含许多非常有用的组件:文本,线段,图像,图形,OLE对象,格式文本,RX Rich2.0,图表图表,条形码,带阴影的文本。 l 报表生成的页数无限制。 l 多页报表;复合报表;子报表;分组;多栏报表;主从报表;透视表;二次表; l 打印过程全控制;支持所有纸张尺寸; l TXT,RTF(用于图形),CSV,HTML(用于图像)输出转换器。 l 在报表预览中查找文本。 l 附加的TfrDataStorage组件允许在运行时创建数据表和查询。这对于需要完全控制报告过程的最终用户报表特别有用。 l 报表生成的页面可以被修改。 l 内置的Pascal解释器可用于非常灵活的报告!语法加亮的支持是使用一个免费的软件库。 l 报表数据可以保存于Delphi的DFM文件,外部文件,数据表的BLOB字段或数据流。 l FastReport可以非常容易地用于创建你自己的报表组件,向导和函数类库。 l 报表的核心部分支持IBObject(不需要BDE)。 l 支持Interbase表达式(IBX). l 报表核心支持ActiveX Data Object(ADO)。 l 完善的数据管理函数(不需要BDE)。
fastreport快速上手手册 这个也是从别的地方下载的 目 录 入门 5 绪言 6 关于FASTREPORT的说明 6 FASTREPORT的历史 6 创建报表 7 数据 8 参数 8 窗体 9 处理 10 准备报表 10 举例:设计一个简单报表 11 FASTREPORT内核 14 DELPHI控件面板 15 “FastReport”页 15 “FRTools”页 17 TfrReport控件 17 TfrDBDataSet控件 20 TfrUserDataSet控件 21 FASTREPORT对象 21 “Text”对象 22 “Band”对象 26 “Image”对象 29 “SubReport”对象 30 “Line”对象 30 “CheckBox”对象 30 “RichText”对象 30 “OLE”对象 31 “Chart”对象 32 “Shape”对象 34 “Barcode”对象 34 “RichText 2.0”对象 35 创建报表 36 FastReport中的Bands 36 简单报表(列表) 39 主-从报表 40 主-细-子细报表 40 交叉报表 40 动态报表 41 bands分隔 42 分栏报表 43 带封面的报表 43 嵌套报表(子报表) 43 主-从-从报表 44 复合报表 44 包含BLOB字段报表 44 没有band的报表 44 分组报表 44 图表报表 45 设计器 46 设计器 47 使用控制键 47 使用鼠标 48 报表选项 48 页面选项 49 设计器选项 51 对象观察器 52 “插入数据字段”窗口 53 数据字典 53 表达式编辑器 58 工具栏 60 “标准”工具栏 60 “格式”工具栏 61 “边框”工具栏 62 “对齐”工具栏 62 程序设计 64 事件 65 TfrReport对象的其它事件 65 变量 66 扩展FASTREPORT函数 68 设计你自己的预览窗口 68 扩展函数列表 69 报表示例 71 报表示例 72 在报表中插入图表 72 运用OnManualBuild事件控制报表逻辑结构 74 运行时使用代码手工合成报表 76 打印可变栏数或未知栏数的报表 77 打印可变栏数和栏宽可变的报表 78 最终用户特性 80 介绍 81 对话框 81 对话框窗体控件 82 Label 83 Edit 83 Memo 84 Button 84 CheckBox 85 RadioButton 85 ListBox 86 ComboBox 86 输入信息到报表中 87 数据访问控件 88 FastReport数据感知控件简介 89 TfrBDELookupComboBox 89 TfrBDETable 89 TfrBDEQuery 92 TfrBDEDataBase 93 创建报表 94 简单的“表格式”报表 94 带参数的报表 95 TFRDATASTORAGE控件 96 连接到一个数据库 97 打开一个数据表 98 生成一个查询 99 字段编辑器 99 创建查询字段 100 查询参数编辑器 101 联接数据 101 参数对话框 102 参数对话框设计器 102 内置语言 103 脚本语言和对象 104 编写代码 105 对象修改 107 内置函数 107 对象的属性和方法 110 解释器的使用 119
FastReport 是非常强大的报表控件,它能使用户的应用程序快速有效地产生报表。FastReport 提供了创建报表所需的所有工具,包括报表引擎,报表设计工具,预览器,对话框设计工具,以及Pascal-like 宏解释程序。 特点: 无需附加的动态链接库(DLL)就可提供快速、紧致、灵活的代码。 运行时可使用内建的功能强大且易于使用的设计工具。 带有"文本搜索"和"编辑"功能的MSWord-like报表预览。 常用的组件集:文本,线,图片,形状,对象链接和嵌入(OLE), RichText, 图表,Barcode。 可以创建自己的组件。 将报表输出为其它格式(例如:TXT, RTF, CSV, HTML, PDF 等等)。 内建的Pascal-like宏语言使得用户无需在Delphi环境中就可以写出代码。它可以创建出使用其它工具所不能创建的报表。 FastReport包含了对话框表格。在准备创建报表前,用户可以使用这一表格来修改参数,而且可以不受限制地使用它。FastReport使用同一个设计工具来创建对话框,这一设计工具带有对话框控件的标准集:按钮,编辑框,复选框等等。 FastReport提供了多样的数据库引擎,它允许用户在运行时创建表格,查询程序及数据库组件。用户的报表和应用程序是完全独立的。 FastReport可以从各种数据源的表格、查询程序、数组及数据文件中导入数据。 FastReport并不依赖于Borland公司的数据库引擎(BDE)。只要是基于标准Tdataset组件的数据库,都能使用FastReportFastReport也可在IB_Objects下工作。IB_Objects是用于Interbase数据库管理系统(DBMS)的功能强大且使用广泛的库。 在FastReport中可使用22语言,这就使得用户的应用程序更易于国际化。
FastReport VCL工作在Borland Delphi 2-7及Borland C++Builder 1-6环境下。它是用对象语言Pascal来写的,并用到了Borland VCL库。 特征: 无需附加的动态链接库(DLL)就可提供快速、紧致、灵活的代码。 运行时可使用内建的功能强大且易于使用的设计工具。 带有"文本搜索"和"编辑"功能的MSWord-like报表预览。 常用的组件集:文本,线,图片,形状,对象链接和嵌入(OLE), RichText, 图表,Barcode。 可以创建自己的组件。 将报表输出为其它格式(例如:TXT, RTF, CSV, HTML, PDF 等等)。 内建的Pascal-like宏语言使得用户无需在Delphi环境中就可以写出代码。它可以创建出使用其它工具所不能创建的报表。 FastReport包含了对话框表格。在准备创建报表前,用户可以使用这一表格来修改参数,而且可以不受限制地使用它。FastReport使用同一个设计工具来创建对话框,这一设计工具带有对话框控件的标准集:按钮,编辑框,复选框等等。 FastReport提供了多样的数据库引擎,它允许用户在运行时创建表格,查询程序及数据库组件。用户的报表和应用程序是完全独立的。 FastReport可以从各种数据源的表格、查询程序、数组及数据文件中导入数据。 FastReport并不依赖于Borland公司的数据库引擎(BDE)。只要是基于标准Tdataset组件的数据库,都能使用FastReportFastReport也可在IB_Objects下工作。IB_Objects是用于Interbase数据库管理系统(DBMS)的功能强大且使用广泛的库。 在FastReport中可使用22语言,这就使得用户的应用程序更易于国际化。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧