如何在ASP.NET中用OWC繪製圖表(2)

來源:互聯網
上載者:User
asp.net|圖表 OWC.aspx.vb:

Imports System
Imports OWC
Imports System.Web.UI

Public Class OWC
  Inherits System.Web.UI.Page
  Protected WithEvents ChartHolder As System.Web.UI.WebControls.PlaceHolder

#Region " Web Form設計器產生的程式碼 "

  '該調用是 Web Form設計器所必需的。
  <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

  End Sub

  Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
    'CODEGEN: 此方法調用是 Web Form設計器所必需的
    '不要使用代碼編輯器修改它。
    InitializeComponent()
  End Sub

#End Region

  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    '在此處放置初始化頁的使用者代碼
    '建立ChartSpace對象來放置圖表
    Dim objCSpace As ChartSpace = New ChartSpaceClass()
    '在ChartSpace對象中添加圖表,Add方法返回chart對象
    Dim objChart As WCChart = objCSpace.Charts.Add(0)
    '指定圖表的類型。類型由OWC.ChartChartTypeEnum枚舉值得到
    objChart.Type = ChartChartTypeEnum.chChartTypeColumnClustered

    '指定圖表是否需要圖例
    objChart.HasLegend = True

    '給定標題
    objChart.HasTitle = True
    objChart.Title.Caption = "1-6說資料分布圖"

    '給定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分割的字串來表示*
    Dim strSeriesName As String = "圖例 1"
    Dim strCategory As String = "1" + ControlChars.Tab + "2" + ControlChars.Tab _
    + "3" + ControlChars.Tab + "4" + ControlChars.Tab + "5" + ControlChars.Tab _
    + "6" + ControlChars.Tab
    Dim strValue As String = "9" + ControlChars.Tab + "8" + ControlChars.Tab _
    + "4" + ControlChars.Tab + "10" + ControlChars.Tab + "12" + ControlChars.Tab _
    + "6" + ControlChars.Tab

    '添加一個series
    objChart.SeriesCollection.Add(0)

    '給定series的名字
    objChart.SeriesCollection(0).SetData(ChartDimensionsEnum.chDimSeriesNames,_
     ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName)

    '給定分類
    objChart.SeriesCollection(0).SetData(ChartDimensionsEnum.chDimCategories,_
     ChartSpecialDataSourcesEnum.chDataLiteral, strCategory)

    '給定值
    objChart.SeriesCollection(0).SetData(ChartDimensionsEnum.chDimValues,_
     ChartSpecialDataSourcesEnum.chDataLiteral, strValue)
    '輸出成GIF檔案.
    Dim strAbsolutePath As String = (Server.MapPath(".")) + "\Images\test.gif"
    objCSpace.ExportPicture(strAbsolutePath, "GIF", 600, 350)

    '建立GIF檔案的相對路徑.
    Dim strRelativePath As String = "Images/test.gif"
    '把圖片添加到placeholder.
    Dim strImageTag As String = "<IMG SRC='277_files/" + strrelativepath + "'/>"

    ChartHolder.Controls.Add(New LiteralControl(strImageTag))
  End Sub
  
End Class

下面是C#版本的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='277_files/" + strrelativepath + "'/>";
    ChartHolder.Controls.Add(new LiteralControl(strImageTag));
    }

    #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
        //
        // CODEGEN:該調用是 ASP.NET Web Form設計器所必需的。
        //
        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');




Microsoft.Office.Interop名稱空間指向Office XP PIA,PIA應該事先安裝到Web伺服器上。編譯原始碼時要用到Office XP PIA OWC的DLL檔案。如果用VS.NET編譯,只要加入一個Microsoft.Office.Interop.Owc.dll檔案的引用即可(位於解開Office XP PIA檔案的目錄),如果從命令列編譯,必須按照下列方式使用/r:參數:

vbc /t:library /out:bin\getchart.dll /r:System.dll /r:System.Web.dll
   /r:System.Data.dll
   /r:C:\oxppia\Microsoft.Office.Interop.Owc.dll getchart.aspx.vb



上面的代碼有許多值得一提的地方。首先,我們假定資料來源位於MSSQL資料庫OWCDEMO,該資料庫有一個OWCDATA表,OWCDATA表有兩個數值列,分別是X和Y。getchart.aspx的目標就是從資料庫擷取記錄,然後用散佈圖(XY)描述這些資料。

OWC圖表的資料點無法直接從ASP.NET的DataSet擷取,因此,我們首先要把資料庫的資料裝入數組,然後用數組的資料填寫OWC圖表的資料點。如果要對本例作改進的話,最好開發一個ASP.NET伺服器控制項,它能夠從抽象的資料來源(包括DataSet對象、XML檔案或數組)擷取資料並產生XY散佈圖。

DataReader要比DataSet快速、高效,不過,我們首先要確定資料庫中的記錄數量,根據記錄數量來調整數組的大小。為此,我們先用一個SQL Select count(*)查詢擷取記錄數量,然後定義數組大小,最後用第二個SQL SELECT查詢擷取資料庫記錄。

如果我們要讓散佈圖的各個點用折線串連起來,記錄必須依照X軸排序,這通過一個SQL ORDER BY子句實現。

OWC的圖表建立在“繪圖空間”上。一個繪圖空間可以包含一個或多個圖表,每一個圖表可以有一個或多個資料數列。在產生OWC圖表時,我們首先建立一個繪圖空間,將一個圖表加入到繪圖空間,設定圖表的類型,添加資料數列,最後用數組的資料填寫資料數列。

另外,我們還可以設定(可選)各種布局參數,例如顏色、座標標題、圖表標題、圖例,等等。OWC提供了數百個布局參數,我們可以隨心所欲地調整圖表。當然,對於不同的圖表類型,繪圖模式也略有不同,例如,餅圖和散佈圖的參數設定方法是不同的。在OWC 10安裝包中有OWC協助檔案,裡面詳細說明了OWC圖表模型。

最後,Response.BinaryWrite參數指定了要輸出的圖形類型(GIF),以及圖形的寬度、高度(以像素為單位)。在這裡,我們可以根據需要縮放從OWC圖表產生的圖形。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.