Fastreport中Chart怎么控制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Fastreport中Chart怎么控制相关的知识,希望对你有一定的参考价值。

参考技术A

在delphi中获取fastreport中的chart需要用到如下代码:

var
VChart :TfrxChartView;
begin
VChart := TfrxChartView(frxReportConstrue.FindObject('Chart'));
end;

procedure TForm_DesignReport.SetChart;
var
i: Integer;
sSeriesType, sFieldName: String;
pChart: TDBChart;
sSeries: TChartSeries;

vMemo: TfrMemoView;
vBand2: TFrBandView;
myDataSet: TClientDataSet;
myFrDataSet: TFrDBDataSet;
myChart: TFrChartView;
begin
//寻找报表中是否有特定的Chart
myChart:=TfrChartView(FRReport.Pages[0].FindObject('myChart'));
if myChart=nil then Exit;

//寻找报表中是否有特定的Memo, 然後根据Memo对Chart进行设置
vMemo := TfrMemoView(FRReport.FindObject('SetmyChart'));
if vMemo=nil then Exit;

//得到主项资料
vBand2:=TfrBandView(FRReport.Pages[0].FindObject('myPageMasterData_myDataSet'));
if vBand2=nil then Exit;

//得到主项资料对应的资料集
myFrDataSet:=(Self.FindComponent(vBand2.DataSet) as TFrDBDataSet);
if myFrDataSet=nil then Exit;
myDataSet:=TClientDataSet(myFrDataSet.DataSet);

pChart:=TDBChart.Create(Self);
try
pChart.RemoveAllSeries;
pChart.View3D:=vMemo.Memo.Values['View3D']='1';
pChart.LeftAxis.Title.Font.Name:='@宋体';
pChart.LeftAxis.Title.Font.Size:=10;
pChart.LeftAxis.Title.Angle:=270;
pChart.LeftAxis.Automatic:=True;

if trim(vMemo.Memo.Values['LeftAxisMax'])<>'-1' then
begin
pChart.LeftAxis.Automatic:=False;
pChart.LeftAxis.AutomaticMaximum:=False;
pChart.LeftAxis.Maximum:=StrToFloat(trim(vMemo.Memo.Values['LeftAxisMax']));
//ShowMessage('111"'+vMemo.Memo.Values['LeftAxisMax']+'"'+vMemo.Memo.Values['LeftAxisMin']+'"');
end;
if trim(vMemo.Memo.Values['LeftAxisMin'])<>'-1' then
begin
//ShowMessage('222"'+vMemo.Memo.Values['LeftAxisMax']+'"'+vMemo.Memo.Values['LeftAxisMin']+'"');
pChart.LeftAxis.Automatic:=False;
pChart.LeftAxis.AutomaticMinimum:=False;
pChart.LeftAxis.Minimum:=StrToFloat(trim(vMemo.Memo.Values['LeftAxisMin']));
end;
pChart.LeftAxis.AutomaticMaximum:=trim(vMemo.Memo.Values['LeftAxisMax'])='-1';
pChart.LeftAxis.AutomaticMinimum:=trim(vMemo.Memo.Values['LeftAxisMin'])='-1';

pChart.LeftAxis.Title.Caption:=vMemo.Memo.Values['YLabel'];
pChart.BottomAxis.Title.Caption:=vMemo.Memo.Values['XLabel'];

sSeriesType:=vMemo.Memo.Values['Series'];
for i:=0 to myDataSet.FieldCount - 1 do
begin
sFieldName:=myDataSet.Fields.FieldName;
if vMemo.Memo.Values[sFieldName]<>'' then
begin
if sSeriesType='Line' then sSeries:=TLineSeries.Create(pChart)
else if sSeriesType='Bar' then sSeries:=TBarSeries.Create(pChart)
else if sSeriesType='Pie' then sSeries:=TPieSeries.Create(pChart);
pChart.AddSeries(sSeries);
sSeries.DataSource:=myDataSet;
sSeries.Title:=vMemo.Memo.Values[sFieldName];
sSeries.YValues.ValueSource:=sFieldName;
end;
end;
myChart.AssignChart(pChart);
except
ShowMessage('图形设置错误!')
end;
end;

题主试试看吧。

winform怎么给fastreport的数据源的表里面自定义的参数赋值?比如select * from 表 where id=@id

winform后台用什么属性可以传值给报表啊?还有就是假如报表的数据源是连接SQL,已经有数据了。在C#后台传个dataset,但是改变不了报表的数据。看了报表的demo,那数据源的表都是没有数据和字段的,但是我创建不了空的表。不然可以在C#里面查询出想要的数据和字段,传给表报显示。
我是想C#传值给报表数据源的sql语句里面自定义的参数,来实现不同的值,打印不同的报表。因为数据是一对多的关系,一个报表可以显示出来。但是分开不了。意思就是,
一组:里面有1个人。 二组:里面有10个人。 三组:里面有2个人。 这样子,报表不会分成3页分别显示这3组。 我就是想。不管哪一组有多少人。反正一组里面的数据读完了,会自动分页。而不是下一组接着再后面显示。
说的我自己都不明白了,希望有人看的懂。

sql查询用group by
在报表里用分组控件,就可以了
参考技术A 还真是看晕了,不过这种问题的解决方法一般就是那几个:
1、取数据之前更改筛选条件。
2、取到数据后更改筛选条件。
3、重新自己取数据后再进行数据绑定。
看你的问题的环境来处理吧,一般是不会弄不了的,只要有源码就OK,即使没源码,想办法也得改出来,呜呼,杯具的程序员追问

我只会C#。不会fastreport的代码。会的话。估计很容易可以实现。

追答

修改的话只需要简略的学习下需要用到的功能代码就行,其实软件这东西,学会了怎么弄功能后基本都是相通的,还是简略的学习下吧,不需要全部学,只需要学习下你的更改需要用到的代码就行了

以上是关于Fastreport中Chart怎么控制的主要内容,如果未能解决你的问题,请参考以下文章

fastreport 动态创建报表的问题

在fastreport中,如何设定使报表可以适应各种打印机?

fastreport 如何根据字数的多少控制字体的

fastreport 类型怎么转换

DELPHI 下fastreport打开指定目录中的报表文件怎么写语句

在c# chart柱状图中,怎么根据数值的大小动态控制单个柱体的颜色