我这是一个动态添加Series的过程,先判断CheckListBox1哪个被选中,然后执行查询,将第一次查询结果做成SeriesList[0],第二次查询结果做成SeriesList[1],代码如下:
begin
    DBChart1.SeriesList.clear;
    j:=0;
    for i:=0 to CheckListBox1.Items.Count-1 do
    if CheckListBox1.Checked[i]=true then
    begin
    s1:=trim(checklistbox1.items[i]);
    QueryData.Close;
    QueryData.parameters.ParamByName('p1')}.Value:=s1;
    QueryData.Open;
    DBChart1.SeriesList[j]:=TLineSeries.Create(nil);
    DBChart1.AddSeries(DBChart1.SeriesList[j]);
    DBChart1.SeriesList[j].DataSource:=QueryData;
    DBChart1.SeriesList[j].XLabelsSource:='CreateTime';
    DBChart1.SeriesList[j].YValues.ValueSource:='Data';
    DBChart1.SeriesList[j].Active:=True;
    Inc(j);
    end;
end;为什么执行到DBChart1.AddSeries(DBChart1.SeriesList[j]);就报个“List index out of bounds(0)”的错?
望大侠们指教

解决方案 »

  1.   

    var
      NewPie : TPieSeries;
    begin
      NewPie := TPieSeries.Create(Self);
      NewPie.ParentChart := DBChart1;
      DBChart1.AddSeries(NewPie);
    end;
      

  2.   

    我这是动态添加多个Series,在图上要显示多条线,所以不能先具体写好Series的名字,要不然第二个Series不就和第一个重复了?就把原来的覆盖了吧
      

  3.   

    用动态数组
    var i:integer; s:string;
    ado_Array: array of tadoquery;
        series: array of TLineSeries ;
    begin
      with ADO_distinct_buyer do
      begin
        close;
        parameters.ParamByName('d1').value := strtodate(datetostr((dp5.DateTime)));
        parameters.ParamByName('d2').value := strtodate(datetostr((dp6.DateTime)));
        open;
      end;
      ClientDataSet1.close;
      ClientDataSet1.open;
      if ClientDataSet1.isempty then exit;
      SetLength(ado_Array,ClientDataSet1.RecordCount);
      SetLength(series,ClientDataSet1.RecordCount);
      ClientDataSet1.First;
      dbChart1.Legend.Visible:=true;
      dbChart1.SeriesList.Clear;
      for i:=1 to ClientDataSet1.RecordCount do
      begin
        s:='select 日期=date1,结算数量=sum(js_shl),均价=avg(price),金额=sum(jin/10000) from dr_tong_ht'
           +' where date1>='+#39+datetostr(dp5.DateTime)+#39+' and date1<='+#39+datetostr(dp6.DateTime)+#39
           +' and buyer='+#39+ClientDataSet1.fieldByName('购方').value+#39
           +' group by date1';
        ado_Array[i-1]:=tadoquery.Create(self);
        ado_Array[i-1].Connection:=f_log.c;
        f_public.opensql(s,ado_Array[i-1]);    series[i-1]:=TLineSeries.Create(self);
        series[i-1].ParentChart:=dbChart1;
        series[i-1].LinePen.Width:=2;
        series[i-1].Active:=false;
        series[i-1].Title:=ClientDataSet1.fieldByName('购方').value;
        series[i-1].DataSource:=ado_Array[i-1];
        series[i-1].XLabelsSource:='日期';
        series[i-1].XValues.ValueSource:='日期';
        series[i-1].YValues.ValueSource:='金额';
        series[i-1].Active:=true;    ClientDataSet1.next;
      end;
    end;
      

  4.   

        ////////////////////创建曲线////////////////////
      qTemp.Close;
      qTemp.SQL.Clear;
      qTemp.SQL.Add('select * from tCard where fFileName=:fFileName Order by fDate');
      qTemp.Parameters.ParamByName('fFileName').Value := vFileName;
      qTemp.Open;
        MySeries := TFastLineSeries.Create(nil);
        MySeries.ParentChart := chart1;
        MySeries.Title := '温度1';
        qTemp.First;
        while not qTemp.Eof do
        begin
          MySeries.AddY(qTemp.FieldByName('fQty').AsCurrency, qTemp.FieldByName('fDate').AsString);
          qTemp.Next;
        end;
        //
        MySeries := TFastLineSeries.Create(nil);
        MySeries.ParentChart := chart1;
        MySeries.Title := '温度2';
        qTemp.First;
        while not qTemp.Eof do
        begin
          MySeries.AddY(qTemp.FieldByName('fQty2').AsCurrency, qTemp.FieldByName('fDate').AsString);
          qTemp.Next;
        end;
        ////////////////////删除曲线////////////////////
      while Chart1.SeriesCount > 0 do
      begin
        Chart1.Series[0].Free;
      end;