网上很多是调用Office来制作3D统计图的,不知道用什么做统计图较好,网上的代码也看不明,麻烦各位帮我解释一下,怎么绑定数据源,如果我想统计course表的成绩列,按分数60分以下,60到80,80分以上这样统计该怎么写,谢谢各位了,最好能详细解释一下,我是菜鸟,再次感谢!
public class ChartFactory
   {
   public ChartFactory()
   {
   InitTypeMap();
   //
   // TODO: 在此处添加构造函数逻辑
   //
   }
   protected System.Web.UI.WebControls.Image imgHondaLineup;
   private string[] chartCategoriesArr;
   private string[] chartValuesArr;
   private OWC11.ChartChartTypeEnum chartType =  OWC11.ChartChartTypeEnum.chChartTypeColumn3D;//默认值
   private static Hashtable chartMap = new Hashtable();
   private static string chartTypeCh = "垂直柱状图" ;
   private static string chartTitle = "";
  private void InitTypeMap()
   {
   chartMap.Clear();
   OWC11.ChartChartTypeEnum[] chartTypes = new OWC11.ChartChartTypeEnum[]{ ChartChartTypeEnum.chChartTypeColumnClustered,
   ChartChartTypeEnum.chChartTypeColumn3D,
   ChartChartTypeEnum.chChartTypeBarClustered,
   ChartChartTypeEnum.chChartTypeBar3D,
   ChartChartTypeEnum.chChartTypeArea,
   ChartChartTypeEnum.chChartTypeArea3D,
   ChartChartTypeEnum.chChartTypeDoughnut,
   ChartChartTypeEnum.chChartTypeLineStacked,
   ChartChartTypeEnum.chChartTypeLine3D,
   ChartChartTypeEnum.chChartTypeLineMarkers,
   ChartChartTypeEnum.chChartTypePie,
   ChartChartTypeEnum.chChartTypePie3D,
  ChartChartTypeEnum.chChartTypeRadarSmoothLine,
   ChartChartTypeEnum.chChartTypeSmoothLine};
  string[] chartTypesCh = new string [] {"垂直柱状统计图","3D垂直柱状统计图","水平柱状统计图","3D水平柱状统计图","区域统计图","3D区域统计图","中空饼图","折线统计图","3D折线统计图","折线带点统计图","饼图","3D饼图","网状统计图","弧线统计图"};
  for(int i=0;i<chartTypes.Length;i++)
   {
   chartMap.Add(chartTypesCh[i],chartTypes[i]);
   }
   }
   public ChartSpaceClass BuildCharts ()
   {
   string chartCategoriesStr = String.Join ("\t", chartCategoriesArr);
   string chartValuesStr = String.Join ("\t", chartValuesArr);
  OWC11.ChartSpaceClass       oChartSpace = new OWC11.ChartSpaceClass ();
  // ------------------------------------------------------------------------
   // Give pie and doughnut charts a legend on the bottom. For the rest of
   // them let the control figure it out on its own.
   // ------------------------------------------------------------------------  chartType = (ChartChartTypeEnum)chartMap[chartTypeCh];
  if (chartType == ChartChartTypeEnum.chChartTypePie ||
   chartType == ChartChartTypeEnum.chChartTypePie3D ||
   chartType == ChartChartTypeEnum.chChartTypeDoughnut)
   {
   oChartSpace.HasChartSpaceLegend = true;
   oChartSpace.ChartSpaceLegend.Position = ChartLegendPositionEnum.chLegendPositionBottom;
   }
  oChartSpace.Border.Color = "blue";
   oChartSpace.Charts.Add(0);
   oChartSpace.Charts[0].HasTitle = true;
   oChartSpace.Charts[0].Type = chartType;
   oChartSpace.Charts[0].ChartDepth = 125;
   oChartSpace.Charts[0].AspectRatio = 80;
   oChartSpace.Charts[0].Title.Caption = chartTitle;
   oChartSpace.Charts[0].Title.Font.Bold = true;
  oChartSpace.Charts[0].SeriesCollection.Add(0);
   oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection.Add ();
  // ------------------------------------------------------------------------
   // If you're charting a pie or a variation thereof percentages make a lot
   // more sense than values...
   // ------------------------------------------------------------------------  if (chartType == ChartChartTypeEnum.chChartTypePie ||
   chartType == ChartChartTypeEnum.chChartTypePie3D ||
   chartType == ChartChartTypeEnum.chChartTypeDoughnut)
   {
   oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].HasPercentage = true;
   oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].HasValue = false;
   }
   // ------------------------------------------------------------------------
   // Not so for other chart types where values have more meaning than
   // percentages.
   // ------------------------------------------------------------------------
   else
   {
   oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].HasPercentage = false;
   oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].HasValue = true;
   }
  
   // ------------------------------------------------------------------------
   // Plug your own visual bells and whistles here
   // ------------------------------------------------------------------------
   oChartSpace.Charts[0].SeriesCollection[0].Caption = String.Empty;
   oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].Font.Name = "verdana";
   oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].Font.Size = 10;
   oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].Font.Bold = true;
   oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].Font.Color = "red";
   oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].Position = ChartDataLabelPositionEnum.chLabelPositionCenter;
  
   if (chartType == ChartChartTypeEnum.chChartTypeBarClustered ||
   chartType == ChartChartTypeEnum.chChartTypeBar3D ||
   chartType == ChartChartTypeEnum.chChartTypeColumnClustered ||
   chartType == ChartChartTypeEnum.chChartTypeColumn3D)
   {
   oChartSpace.Charts[0].SeriesCollection[0].DataLabelsCollection[0].Position = ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;
   }
  
   oChartSpace.Charts[0].SeriesCollection[0].SetData (OWC11.ChartDimensionsEnum.chDimCategories,
   Convert.ToInt32(OWC11.ChartSpecialDataSourcesEnum.chDataLiteral), chartCategoriesStr);
  oChartSpace.Charts[0].SeriesCollection[0].SetData (OWC11.ChartDimensionsEnum.chDimValues,
   Convert.ToInt32(OWC11.ChartSpecialDataSourcesEnum.chDataLiteral), chartValuesStr);
  return oChartSpace;
   }
  #region  属性设置
   public string[] chartCategoriesArrValue
   {
   get
   {
   return chartCategoriesArr;
   }
   set
   {
   chartCategoriesArr = value;
   }
   }
  public string[] chartValuesArrValue
   {
   get
   {
   return chartValuesArr;
  }
   set
   {
   chartValuesArr = value;
   }
   }
   public string chartTypeValue
   {
   get
   {
   return chartTypeCh;
   }
   set
   {
   chartTypeCh = value;
   }
   }
   public string chartTitleValue
   {
   get
   {
   return chartTitle;
   }
   set
   {
   chartTitle = value;
   }
   }
   #endregion
   }
  //调用   首先需要在页面上放置一个Image来显示产生的统计图  public void ShowChart()
   {
  //初始化赋值
   chartFactory.chartCategoriesArrValue = chartCategories;
   chartFactory.chartValuesArrValue = chartValues;
   chartFactory.chartTitleValue = chartTitle;
   chartFactory.chartTypeValue = chartType;
  OWC11.ChartSpaceClass oChartSpace = chartFactory.BuildCharts();
   string path = Server.MapPath(".") + @"\images\Chart.jpeg";  //产生图片并保存 页可以是png gif图片
   oChartSpace.ExportPicture(path,"jpeg", 745, 500);
   Image1.ImageUrl = path;  // 显示统计图
   }
  // 保存统计图请参照上一篇文章
  //由于每次生成的统计图都会覆盖原来的图片所以有必要的话可以用日期加时间的方式来作为图片的名字,但是这样将会产生很多图片需及时处理,如不需要只需取同名覆盖原来图片即可。

解决方案 »

  1.   

      chartFactory.chartCategoriesArrValue = chartCategories; 
       chartFactory.chartValuesArrValue = chartValues; 
    这里赋值,如分类和值
      

  2.   

    哈哈,是呀,就是那篇呀,chartFactory.chartCategoriesArrValue, chartFactory.chartValuesArrValue分别表示什么呀,麻烦再说清楚一点好吗
      

  3.   

    两个都是数组,chartFactory.chartCategoriesArrValue是不是可以手动添加上去,比如我要统计成绩,可不可以这样写
    chartFactory.chartCategoriesArrValue[0]="60分以下"
    chartFactory.chartCategoriesArrValue[1]="60-80分"
    chartFactory.chartCategoriesArrValue[2]="80分以上",
    chartFactory.chartValuesArrValue = chartValues;这个应该怎么表示呢,查找表中对应的记录数赋值吗
      

  4.   

    为什么不用google的免费的api,比这个好用多了。
      

  5.   

    为什么不用google的免费的api,比这个好用多了。
    地址:http://code.google.com/apis/visualization/