找回密码
 立即注册

QQ登录

只需一步,快速开始

ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-11-2 17:41:00
11#
使用 fpSpread1.ActiveSheet.Charts[0].Model = model; 的前提是,在ActiveSheet中必须先插入一个Chart,如果没有的话就会报错。
回复 使用道具 举报
evenwan
论坛元老   /  发表于:2012-11-8 09:53:00
12#
回复 11楼dof的帖子

dof大大  我这边试了好久 实在是搞不定了。。

我现在想要用下图的这组数据  实现帖子最上边的那种柱形和线形的组合图。感觉很复杂。整不出来了。求助~~~~~~


aa.jpeg (47.91 KB, 下载次数: 69)
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-11-8 18:10:00
13#
evenwan 你好

明天我会根据这个数据做一个Demo发送给你,谢谢!
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-11-9 14:06:00
14#
回复 12楼evenwan的帖子

evenwan 你好

希望附件中的Demo能够解决你当前的问题:
  1.         private void CreateChart()
  2.         {
  3.             OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\App_Data\6708.mdb");


  4.             OleDbCommand command1 = new OleDbCommand("", connection);
  5.             OleDbDataAdapter adapter = new OleDbDataAdapter(command1);

  6.             // 取出TktDate列的数据,作为图表的横坐标
  7.             command1.CommandText = "SELECT DISTINCT TktDate FROM Tkt";
  8.             DataTable dt1 = new DataTable();
  9.             adapter.Fill(dt1);

  10.             // 取出每天内所有公司数据的合计,作为堆积柱状图的数据源
  11.             command1.CommandText = "SELECT TktDate, TktCarrier, SUM(TAmount) AS TAmount FROM Tkt GROUP BY TktDate, TktCarrier";
  12.             DataTable dt2 = new DataTable();
  13.             adapter.Fill(dt2);

  14.             // 取出所有公司的名称,作为堆积柱状图的系列名称
  15.             command1.CommandText = "SELECT DISTINCT TktCarrier FROM Tkt";
  16.             DataTable dt3 = new DataTable();
  17.             adapter.Fill(dt3);

  18.             // 取出每天内所有公司的合计件数,作为折线图的数据源
  19.             command1.CommandText = "SELECT TktDate, SUM(TCount) AS TAmount FROM Tkt GROUP BY TktDate";
  20.             DataTable dt4 = new DataTable();
  21.             adapter.Fill(dt4);
  22.             

  23.             // 添加堆积图系列
  24.             StackedBarSeries series_stack = new StackedBarSeries();
  25.             series_stack.YAxisId = 1;
  26.             //series_stack.LegendAreaId = 0;

  27.             // 用于组织堆积柱状图中各个系列的值
  28.             List<double> list = null;
  29.             DataView view = dt2.DefaultView;

  30.             foreach (DataRow row in dt3.Rows)
  31.             {
  32.                 BarSeries series_bar = new BarSeries();
  33.                 series_bar.CategoryNames.DataSource = dt1;
  34.                 series_bar.CategoryNames.DataField = dt1.Columns[0].ColumnName;
  35.                 series_bar.SeriesName = row["TktCarrier"].ToString();

  36.                 view.RowFilter = string.Format("TktCarrier = '{0}'", row["TktCarrier"].ToString());
  37.                 view.Sort = "TktDate";
  38.                
  39.                 list = CreateBarSeriesValues(dt1, dt1.Columns[0].ColumnName,view);

  40.                 series_bar.Values.AddRange(list.ToArray<double>());
  41.                 series_stack.Series.Add(series_bar);
  42.             }


  43.             // 添加折线图系列
  44.             FarPoint.Win.Chart.LineSeries series_line = new FarPoint.Win.Chart.LineSeries();
  45.             series_line.Values.DataSource = dt4;
  46.             series_line.Values.DataField = dt4.Columns[1].ColumnName;
  47.             series_line.CategoryNames.DataSource = dt1;
  48.             series_line.CategoryNames.DataField = dt1.Columns[0].ColumnName;

  49.             // 设置绘图区域属性
  50.             FarPoint.Win.Chart.YPlotArea plotArea = new FarPoint.Win.Chart.YPlotArea();
  51.             FarPoint.Win.Chart.ChartModel model = new FarPoint.Win.Chart.ChartModel();
  52.             plotArea.Location = new PointF(0.2F, 0.2F);
  53.             plotArea.Size = new SizeF(0.6F, 0.6F);
  54.             plotArea.XAxis.LabelRotationAngle = -60;
  55.             plotArea.YAxes[0].AutoMinorUnit = false;

  56.             // 添加第二纵坐标
  57.             ValueAxis y2 = new ValueAxis();
  58.             y2.AxisId = 1;
  59.             y2.Location = AxisLocation.Far;
  60.             plotArea.YAxes.Add(y2);

  61.             // 图例区
  62.             LegendArea legendArea = new LegendArea();
  63.             legendArea.Vertical = false;
  64.             legendArea.Location = new PointF(0.2f, 0.1f);            

  65.             // 将系列添加到绘图区域
  66.             plotArea.Series.Add(series_stack);
  67.             plotArea.Series.Add(series_line);
  68.             
  69.             model.PlotAreas.Add(plotArea);
  70.             model.LegendAreas.Add(legendArea);

  71.             FarPoint.Win.Spread.Chart.SpreadChart chart = new FarPoint.Win.Spread.Chart.SpreadChart();
  72.             chart.Size = new Size(1024, 500);
  73.             chart.Location = new Point(0, 0);
  74.             chart.Model = model;

  75.             fpSpread1.ActiveSheet.Charts.Add(chart);

  76.         }

  77.         // 组织堆积柱状图中各个系列的值
  78.         private List<double> CreateBarSeriesValues(DataTable dt, string col, DataView view)
  79.         {
  80.             Dictionary<string, double> list = new Dictionary<string, double>();
  81.             foreach (DataRow row in dt.Rows)
  82.             {
  83.                 list.Add(row[col].ToString(), 0);
  84.             }

  85.             foreach (DataRowView row in view)
  86.             {
  87.                 list[row["TktDate"].ToString()] = Convert.ToDouble(row["TAmount"].ToString());
  88.             }

  89.             return list.Select( item => item.Value).ToList<double>();
  90.         }
复制代码


50.png

VS2010 + Spread .NET 6
6708_Chart.zip (23.24 KB, 下载次数: 207)
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部