最近在开发一个报告生成系统,其中使用到了.NET图表第三方控件。以下是使用OWC9画一个BAR图的范例:
public class ChartClass
{
public ChartClass()
{
}
public void GetChart(string category,string value1,string value2,string title,System.Web.HttpServerUtility Server,System.Web.UI.WebControls.PlaceHolder ChartHolder,string filename,string sdate,string edate,bool y)
{
OWC.ChartSpace objCSpace = new OWC.ChartSpaceClass ();
OWC.WCChart objChart = objCSpace.Charts.Add (0);
objChart.Type = OWC.ChartChartTypeEnum.chChartTypeBarStacked; //图表类型
objChart.HasLegend = true;
objChart.HasTitle = true;
if(y==true)
objChart.Title.Caption= title + " 前十二个月广告主花费 (" + sdate + " 至 " + edate + ")";
else
objChart.Title.Caption= title + " 上个月广告主花费 (" + sdate + " 至 " + edate + ")";
objChart.Axes[0].HasTitle = false;
objChart.Axes[1].HasTitle = false;
objChart.SeriesCollection.Add(0);
objChart.SeriesCollection[0].SetData (OWC.ChartDimensionsEnum.chDimSeriesNames, (int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, "报纸");
objChart.SeriesCollection[0].SetData (OWC.ChartDimensionsEnum.chDimCategories, (int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, category);
objChart.SeriesCollection[0].SetData (OWC.ChartDimensionsEnum.chDimValues,(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, value1);
objChart.SeriesCollection.Add(1);
objChart.SeriesCollection[1].SetData (OWC.ChartDimensionsEnum.chDimSeriesNames, (int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, "杂志");
objChart.SeriesCollection[1].SetData (OWC.ChartDimensionsEnum.chDimCategories, (int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, category);
objChart.SeriesCollection[1].SetData (OWC.ChartDimensionsEnum.chDimValues,(int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, value2);
object ob = "#66FF66";
objChart.SeriesCollection[0].Interior.set_Color(ref ob); //不知道为什么,VB里,可以使用Interior.Color="#66FF66"来直接设置颜色,而C#里必须使用set_Color方法,而且参数必须是ref object。
objChart.SeriesCollection[0].Border.set_Color(ref ob);
ob="#6699ff";
objChart.SeriesCollection[1].Interior.set_Color(ref ob);
objChart.SeriesCollection[1].Border.set_Color(ref ob);
objChart.SeriesCollection[0].Border.set_Weight(OWC.LineWeightEnum.owcLineWeightThin);
objChart.SeriesCollection[1].Border.set_Weight(OWC.LineWeightEnum.owcLineWeightThin);
ob="#FFFFFF";
objChart.PlotArea.Border.set_Color(ref ob);
objChart.PlotArea.Interior.set_Color(ref ob);
objChart.Axes[0].Font.set_Name("Arial");
objChart.Axes[0].Font.set_Size(9);
objChart.Axes[1].MajorTickMarks=OWC.ChartTickMarkEnum.chTickMarkInside;
objChart.Axes[1].MinorTickMarks=OWC.ChartTickMarkEnum.chTickMarkNone;
ob="#CCCCCC";
objChart.Axes[0].MajorGridlines.Line.set_Color(ref ob);
objChart.Axes[1].Font.set_Name("宋体");
objChart.Axes[1].Font.set_Size(9);
// objChart.SeriesCollection[0].DataLabelsCollection.Add();
// objChart.SeriesCollection[1].DataLabelsCollection.Add();
// objChart.SeriesCollection[0].DataLabelsCollection[0].HasValue=true;
// ob="red";
// objChart.SeriesCollection[0].DataLabelsCollection[0].Font.set_Color(ref ob);
// objChart.SeriesCollection[1].DataLabelsCollection[0].Font.set_Color(ref ob);
// objChart.SeriesCollection[0].DataLabelsCollection[0].Position=OWC.ChartDataLabelPositionEnum.chLabelPositionOutsideBase;
// objChart.SeriesCollection[1].DataLabelsCollection[0].Position=OWC.ChartDataLabelPositionEnum.chLabelPositionOutsideEnd;
//上面几段注释掉的内容,是在数据柱上显示数据值的设置代码
objChart.Legend.Font.set_Name("宋体");
objChart.Legend.Font.set_Size(9);
objChart.Title.Font.set_Name("宋体");
objChart.Title.Font.set_Size(11);
string strAbsolutePath = Server.MapPath(".")+ @"/TempFiles/" + filename; //文件保存的位置
objCSpace.ExportPicture(strAbsolutePath, "GIF", 600, 350); //文件的分辨率其他属性
string strRelativePath = "./TempFiles/" + filename;
string strImageTag = "<IMG SRC='" + strRelativePath + "'/>";
ChartHolder.Controls.Add(new LiteralControl(strImageTag)); //将图片填充到PlaceHolder对象ChartHoler中。
}
}
最后显示的图表效果如下: