在ASP中插入圖表,常用的方法是使用MSChart控件。那么在ASP.NET是否也是這樣呢?答案是不可以的。
我們知道ASP.NET是一種編譯語言,當客戶端第一次調(diào)用ASP.NET頁面的時候,其實是經(jīng)過了一種比較復雜的編譯過程,編譯生產(chǎn)MSIL文件,存儲到本地機,MSIL文件其實是一個中間語言的文件,然后此文件又通過JIT(Just in time)編譯器進行再編譯,生成機器語言,這樣你所調(diào)用的ASP.NET頁面才展現(xiàn)出來,對于不同的機器,有著不同的JIT,也就被編譯成不同機器語言,這就是微軟公司大力鼓吹ASP.NET的所謂跨平臺的原理。
當ASP.NET頁面被編譯成MSIL文件的時候,編譯所使用的類庫必須是受管代碼文件(Managed Code),而ActiveX控件是已經(jīng)被編譯成機器語言的文件,他屬于非受管代碼文件(Unmanaged Code)。所以直接在ASP.NET調(diào)用MSChart組件是不可能的。雖然你可以利用.Net框架提供的工具把此MSChart組件轉換成受管代碼文件,但這個過程相對比較復雜,并且利用這種方法產(chǎn)生的圖表速度相當慢,還有就是由MSChart組件自身所限制,對于復雜的圖表,是無法利用他來生成的。
本文將以股市的行情圖表為例,介紹如何在ASP.NET中實現(xiàn)圖表。其實我們看到的行情圖并不是一個圖表,而是一個圖片。在服務器端產(chǎn)生圖片,然后在圖片上面畫出想要顯示給用戶的各種信息,然后通過瀏覽器發(fā)送圖片到客戶端,從而形成圖表,這就是本文要探討的方法。這種方法雖然實現(xiàn)起來比較復雜,但操作靈活,非常實用,尤其適用于互聯(lián)網(wǎng)上的圖表,下面就來介紹具體的實現(xiàn)方法。
一.本文中介紹的程序設計及運行環(huán)境
(1).微軟視窗2000 服務器版
(2)..Net Framework SDK Beta 2以上版本
二.在ASP.NET中實現(xiàn)數(shù)據(jù)圖表的關鍵步驟以及解決方法:
在ASP.NET頁面中畫出圖表的關鍵步驟主要有兩步,其一,創(chuàng)建一個圖片對象(Bitmap)。然后利用.Net FrameWork SDK所提供的方法在此圖片對象上面畫出自己想要的圖形,譬如畫線,畫點等。其二,就是為了更適合傳輸,把此圖片對象,以"Jpeg"格式保存,并顯示出來。下面我們就來看看這二步的具體實現(xiàn)方法。
(1).首先我們來看看如何在ASP.NET頁面創(chuàng)建一個動態(tài)圖片,并顯示出來。
創(chuàng)建一個圖片對象其實非常容易的,利用命名空間"System.drawing"中的"Bitmap"類來實現(xiàn)的,下列語句可以創(chuàng)建一個位圖對象:
//創(chuàng)建一個"Bitmap"對象 |
修改"Bitmap"對象的二個參數(shù)來改變創(chuàng)建的位圖對象的長和寬。通過Bitmap類的Save方法就可以顯示已經(jīng)創(chuàng)建的位圖對象。由于位圖文件要占用很多的空間,為了便于網(wǎng)絡傳輸,一般轉換成"Jpeg"或者"Gif"文件來保持。下面語句是把已經(jīng)創(chuàng)建的位圖對象,轉換成"Jpeg"文件顯示:
//以"Jpeg"格式保存此圖片對象,在客戶端顯示出來 |
稍加修改,就可以把位圖對象以"Gif"文件來顯示,具體如下:
//以"Jpeg"格式保存此圖片對象,在客戶端顯示出來 |
下面代碼(chart3.aspx)的作用就是ASP.NET動態(tài)創(chuàng)建一個圖片并顯示出來:
<%@ Page Language = "C#" ContentType = "image/jpeg" %> |
下面是此代碼運行后的界面:
![]() 圖01:利用ASP.NET動態(tài)創(chuàng)建圖片 |
產(chǎn)生的是一個黑色的圖片,很不美觀,下面就來給此圖片上色,并且在此圖片上面畫線、寫字等。
(2).如何給產(chǎn)生得圖片上色:
其實給產(chǎn)生得圖片上色是比較容易的,首先根據(jù)"Bitmap"對象創(chuàng)建一個"Graphic"對象,然后根據(jù)此"Graphic"對象的方法來確定上色的圖形類型(譬如顯示的圖片為橢圓、正方形等)。下面代碼(chart4.aspx)的作用就是給chart3.aspx代碼產(chǎn)生的圖片上淡綠色:
<%@ Page Language = "C#" ContentType = "image/jpeg" %> |
下圖是chart4.aspx運行的界面:
![]() 圖02:給產(chǎn)生的圖片上色 |
當然你不僅可以定制所產(chǎn)生的圖片顏色,還可以定制產(chǎn)生的圖片的形狀,下面代碼段的功能就是定制圖片的形狀為橢圓:
<%@ Page Language = "C#" ContentType = "image/jpeg" %> |
下圖是此代碼的運行界面:
![]() 圖03:定制圖片的形狀 |
當然還可以使用"Graphic"對象的其他方法把圖片定制成其他形狀,這就不一一介紹了。
(3).如何在圖片上實現(xiàn)畫線和寫字:
在圖片上寫字是通過產(chǎn)生的"Graphic"對象的DrawString ( )方法來實現(xiàn)的,在調(diào)用此方法前,必須設置字體和刷子,具體調(diào)用方法是:
public void DrawString ( |
"s"是要輸出的字符串,"font"是字符串的字體,"brush"是定義刷子,后面二個參數(shù)是產(chǎn)生字符串的位置坐標。在程序中產(chǎn)生字符串的具體語句如下:
Font axesFont = new Font ( "arial" , 10 ) ; |
要在圖片上畫線要使用到"Graphic"對象的DrawLine ( )方法,具體的使用語法如下:
public void DrawLines ( |
其中"points"是定義點的位置,當然你也可以使用本文中使用的方法來調(diào)用,就是定義每畫一道線,這樣我感覺更方法些。下面是在產(chǎn)生的圖片上畫出三條線:
Pen redPen = new Pen ( Color . Red , 1 ) ; |
知道了這些基本知識,在定制圖片形狀,給圖片上色,在圖片上寫字、畫線就顯得比較容易了,下面代碼(chart2.aspx)的功能就是定制一個正方形圖片,并在圖片上畫線、寫字、上色,具體如下:
<%@ Page Language = "C#" ContentType = "image/jpeg" %> |
![]() 圖04:在圖片上完成畫線、寫字和上色 |
三.在ASP.NET中實現(xiàn)數(shù)據(jù)圖表的完整源代碼和運行界面:
在掌握了產(chǎn)生圖片,在給圖片上色、在圖片上輸出字符、和畫線等基本操作過以后,充分的利用各種基本操作,就可以得的在ASP.NET中實現(xiàn)數(shù)據(jù)圖表的完整程序,下圖是運行界面:
圖05:在ASP.NET中實現(xiàn)數(shù)據(jù)圖表的運行界面
下面是在ASP.NET中實現(xiàn)數(shù)據(jù)圖表的完整代碼(chart1.aspx),如下:
<%@ Import Namespace = "System" %> |
![]() |
四. 總結:
實現(xiàn)圖表始終是互聯(lián)網(wǎng)編程的一個難點,本文介紹了在ASP.NET頁面中如何實現(xiàn)數(shù)據(jù)圖表,在沒有什么好的組件可以利用的前提下,利用.Net FrameWork SDK GDI+中提供的各種用以操作圖形的方法,這樣的過程雖然有點煩雜,但對實現(xiàn)復雜的圖表是非常有用的。希望本文不僅能夠幫助讀者解決在互聯(lián)網(wǎng)上的圖表問題,也能夠?qū)ψx者的針對GDI+也有所了解。