在ASP.NET中使用OWC创建统计图

图形和图表是Web上数据表现的很好的形式,在ASP.NET,可以使用Office Web Components (OWC)来创建统计图。Office Web Component (OWC)是包含在Microsoft Office 2000中的一套组件,利用这些组件,我们可以很方便地在浏览器中或者传统的编程环境中进行数据分析和报表。比如:电子报表,图表,数据透视表等。

要在浏览器中显示图表,可以按下面的步骤进行:

  1. 从数据库中读取要生成图表的数据;
  2. 创建OWC图表;
  3. 添加必要的数据系列;
  4. 为个数据列赋数据;
  5. 定义外观;
  6. 创建GIF图形;
  7. 用IMG标记显示图形。

要生成图表的数据称为数据原,Chart Component组件支持的数据源有:实现IDataSource接口的任何数据源;ADO Recordset对象;XML文件;数组或者一定格式的文本字符串。在ASP中,我们可以用ADO Recordset对象;在.NET的ADO.NET中,由于ADO.NET没有实现IDataSource,.NET也没有提供ADO.NET DataSet对象向ADO Recordset对象的直接转换,如果你有一个 DataSet对象,你要么转换成XML文件,要么生成特殊格式的字符串才可以使用。下面就是本例子的结果:

下面是实现这种功能的VB.NET版本的ASP.NET例子与代码:

OWC.aspx:

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="OWC.aspx.vb" Inherits="aspxWeb.OWC"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <HEAD> <title>WebForm1</title> <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"> <meta name="CODE_LANGUAGE" Content="C#"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <asp:placeholder id="ChartHolder" runat="server"></asp:placeholder> </form> </body> </HTML>

OWC.asp.cs

ublic class owc: System.Web.UI.Page { protected System.Web.UI.WebControls.PlaceHolder ChartHolder; private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 //创建ChartSpace对象来放置图表 OWC.ChartSpace objCSpace = new OWC.ChartSpaceClass (); //在ChartSpace对象中添加图表,Add方法返回chart对象 OWC.WCChart objChart = objCSpace.Charts.Add (0); //指定图表的类型。类型由OWC.ChartChartTypeEnum枚举值得到 objChart.Type = OWC.ChartChartTypeEnum.chChartTypeColumnClustered; //指定图表是否需要图例 objChart.HasLegend = true; //给定标题 objChart.HasTitle = true; objChart.Title.Caption= "上半年分布图"; //给定x,y轴的图示说明 objChart.Axes[0].HasTitle = true; objChart.Axes[0].Title.Caption = "Y : 数量"; objChart.Axes[1].HasTitle = true; objChart.Axes[1].Title.Caption = "X : 月份"; //计算数据 /*categories 和 values 可以用tab分割的字符串来表示*/ string strSeriesName = "图例 1"; string strCategory = "1" + '/t' + "2" + '/t' + "3" + '/t'+"4" + '/t' + "5" + '/t' + "6" + '/t'; string strValue = "9" + '/t' + "8" + '/t' + "4" + '/t'+"10" + '/t' + "12" + '/t' + "6" + '/t'; //添加一个series objChart.SeriesCollection.Add(0); //给定series的名字 objChart.SeriesCollection[0].SetData (OWC.ChartDimensionsEnum.chDimSeriesNames, + (int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName); //给定分类 objChart.SeriesCollection[0].SetData (OWC.ChartDimensionsEnum.chDimCategories, + (int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strCategory); //给定值 objChart.SeriesCollection[0].SetData (OWC.ChartDimensionsEnum.chDimValues, (int)OWC.ChartSpecialDataSourcesEnum.chDataLiteral, strValue); //输出成GIF文件. string strAbsolutePath = (Server.MapPath(".")) + "//i//test.gif"; objCSpace.ExportPicture(strAbsolutePath, "GIF", 600, 350); //创建GIF文件的相对路径. string strRelativePath = "./i/test.gif"; //把图片添加到placeholder. string strImageTag = "<IMG SRC='" + strRelativePath + "'/>"; ChartHolder.Controls.Add(new LiteralControl(strImageTag)); } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion }

如果用ADO.NET的DataSet对象,可以生成以TAB分割的字符串:

strValue += (nodes.Item(j).ChildNodes.Item(0).InnerText + '/t'); strCategory += (nodes.Item(j).ChildNodes.Item(1).InnerText + '/t');

ASP.NET创建统计图的问题

08-29

问题:请问为何图片不能全部显示,只能显示上半部分,如图:[img=D:\我的文档\桌面\待问][/img]rn代码如下: rnSqlConnection mycon = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);rn string strSeriesName = "图例 1";rn string SelStr = "select 计费月份,sum(表数据量)表数据量 from 电水煤气费用 where 用户编号='" + this.DropDownList1.SelectedValue + "' and 费用类型='" + this.DropDownList3.SelectedValue + "' and 计费年份='" + this.DropDownList2.SelectedValue + "' group by 计费月份";rn mycon.Open();rn SqlDataAdapter Da = new SqlDataAdapter(SelStr, mycon);rn DataSet Ds = new DataSet();rn Da.Fill(Ds);rn //存放月份rn string[] MonNum = new string[12];rn //存放月份数据rn string[] MonCount = new string[12];rn //分别为数组赋值rn for (int i = 0; i < Ds.Tables[0].Rows.Count; i++)rn rn MonNum[i] = Ds.Tables[0].Rows[i][0].ToString();rn MonCount[i] = Ds.Tables[0].Rows[i][1].ToString();rn rn //为x轴指定特定字符串,以便显示数据rn string strXdata = String.Empty;rn foreach (string strData in MonNum)rn rn strXdata += strData + "\t";rn rn string strYdata = String.Empty;rn //为y轴指定特定的字符串,以便与x轴相对应rn foreach (string strValue in MonCount)rn rn strYdata += strValue + "\t";rn rn //创建ChartSpace对象来放置图表rn ChartSpace laySpace = new ChartSpaceClass();rn //在ChartSpace对象中添加图表rn ChChart InsertChart = laySpace.Charts.Add(0);rn //指定绘制图表的类型。类型可以通过OWC.ChartChartTypeEnum枚举值得到rn InsertChart.Type = ChartChartTypeEnum.chChartTypeColumnClustered3D;rn //指定图表是否需要图例标注rn InsertChart.HasLegend = true;rn //为图表添加标题rn InsertChart.HasTitle = true;rn InsertChart.Title.Caption = "" + this.DropDownList1.SelectedValue + "业主" + this.DropDownList2.SelectedValue + "" + this.DropDownList3.SelectedValue + "统计量图";rn //为x,y轴添加图示说明rn InsertChart.Axes[0].HasTitle = true;rn InsertChart.Axes[0].Title.Caption = "X : 月份";rn InsertChart.Axes[1].HasTitle = true;rn InsertChart.Axes[1].Scaling.SplitMinimum = 200;rn InsertChart.Axes[1].Title.Caption = "Y : 数量";rn //添加一个series系列rn InsertChart.SeriesCollection.Add(0);rn //给定series系列的名字rn InsertChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimSeriesNames, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName);rn //给定分类rn InsertChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimCategories, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, strXdata);rn //给定值rn InsertChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, strYdata);rn //输出成GIF文件.rn string strAbsolutePath = (Server.MapPath(".")) + "\\ShowData1.gif";rn laySpace.ExportPicture(strAbsolutePath, "GIF", 600, 350);rn //创建GIF文件的相对路径.rn string strRelativePath = "ShowData1.gif";rn //把图片添加到placeholder显示到页面中rn string strImageTag = "";rn this.Panel1.Visible = false;rn this.PlaceHolder2.Controls.Add(new LiteralControl(strImageTag));rn rn

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭