[點擊下載]
2、注冊owc11
在工程中添加 C:\Program Files\Common Files\Microsoft Shared\Web Components\11 文件下的owc11.dll引用
3、在工程中添加
using OWC11;
4、開始coding 舉例如下:
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.ChartDimensionsEnumChartSpace.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.ChartDimensionsEnumChartSpace.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.ChartDimensionsEnumChartSpace.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.ChartDimensionsEnumChartSpace.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; // 顯示統計圖
}
// 保存統計圖請參照上一篇文章
//由於每次生成的統計圖都會覆蓋原來的圖片所以有必要的話可以用日期加時間的方式來作為圖片的名字,但是這樣將會產生很多圖片需及時處理,如不需要只需取同名覆蓋原來圖片即可。