日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在Asp.net页面中实现数据饼图

發布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在Asp.net页面中实现数据饼图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ASP.NET之所以能夠在客戶端瀏覽器中形成各種數據圖片,是因為在ASP.NET中提供了繪圖功能,具體的作法是先在服務器端創建一個Bitmap實例,然后利用ASP.NET中提供的繪圖功能,按照要生成的圖片的模樣,進行繪制,最后把繪制好的實例以數據流的方式傳送到客戶端的瀏覽器上,并形成圖片顯示出來。本文要介紹的在ASP.NET頁面中實現數據餅圖采用的基本也是這種方法。餅圖有時稱為"Pie"圖,本文要實現的數據餅圖模樣具體如圖01所示:

圖01:在ASP.NET頁面中產生的數據餅圖

  一.本文程序設計和運行的軟件環境:

  (1).微軟公司視窗2000服務器版。

  (2).Visual Studio .Net正式版,.Net FrameWork SDK版本號3705。

  (3).MDAC 2.6(Microsoft Data Acess Component)以上版本。

  二.數據字典:
為了方便起見,本文選擇的數據庫類型為本地數據庫--Access 2000,如果你使用的是其他數據庫類型,只需對下面介紹的程序中的關于數據庫連接的代碼進行相應的修改就可以了。Access數據庫名稱為"db2.mdb",在此數據庫中只定義了一張數據表"MonthSale",此表的結構如表01所示:

字段名稱類型 說明
ID自動編號 主鍵 ,遞增
YF 數字銷售月份
SL數字 銷量
         表01:MonthSale數據表的結構

  在定義完"db2.mdb"數據庫中的"MonthSale"數據表后,在MonthSale數據表中按照表02所示添加記錄:

ID YF SL
1 1 12
2 2 5
337
4 4 20
5 5 16
6 6 10
7 7 19
8 8 8
997
10 10 13
11 11 11
12 12 15
      表02:MonthSale數據表中的記錄情況

  在MonthSale數據表中添加完這12條記錄后,保存"db2.mdb"數據庫到C盤的根目錄中。

下面就要解決根據從數據庫中讀取的數據繪制Pie圖的方法。

  (1).繪制數據Pie圖的實現方法:

  圖01所示的Pie圖看似是由一個圓形按照從數據庫中得到數據值的大小分割而成的,其實在具體實現時并非如此,圖01所示的Pie圖其實由許多根據從數據庫中數值大小,繪制相應的扇型,并由這些扇型組合而成的

  (2).簡介ASP.NET頁面中繪制扇型要使用到的類及其方法:

  在本文和前文中,在ASP.NET頁面中實現繪圖功能主要使用的是Graphics類,Graphics類被封裝在命名空間"System.Drawing"中。Graphics類中定義了很多方法和屬性,這些方法和屬性都與繪圖有關,Graphics類中的常用成員具體可參閱表01和表02,表01是Graphics類中的常用方法及其說明,表02是Graphics類中常用屬性及其說明:

方法 說明
Clear清除整個繪圖面并以指定背景色填充。
Dispose釋放由此Graphics對象使用的所有資源。
DrawArc 繪制一段弧線,它表示由一對坐標、寬度和高度指定的橢圓部分。
DrawEllipse繪制一個由邊框定義的橢圓。
DrawIcon在指定坐標處繪制由指定的Icon對象表示的圖像。
DrawIconUnstretched 繪制指定的Icon對象表示的圖像,而不縮放該圖像。
DrawImage 在指定位置并且按原始大小繪制指定的Image對象。
DrawImageUnscaled在坐標對所指定的位置并且按其原始大小繪制指定的Image對象。
DrawLine繪制一條連接由坐標對指定的兩個點的線條。
DrawLines 繪制一系列連接一組Point結構的線段。
DrawPie 繪制一個扇形,該扇形由一個坐標對、寬度和高度以及兩條射線所指定的橢圓定義。
DrawPolygon 繪制由一組Point結構定義的多邊形。
DrawRectangle繪制由坐標對、寬度和高度指定的矩形。
DrawRectangles 繪制一系列由Rectangle結構指定的矩形。
DrawString 在指定位置并且用指定的Brush和Font對象繪制指定的文本字符串。
FillClosedCurve填充由Point結構數組定義的閉合基數樣條曲線的內部。
FillEllipse 填充邊框所定義的橢圓的內部,該邊框由一對坐標、一個寬度和一個高度指定。
FillPie填充由一對坐標、一個寬度、一個高度以及兩條射線指定的橢圓所定義的扇形區的內部。
FillPolygon
填充Point結構指定的點數組所定義的多邊形的內部。
FillRectangle填充由一對坐標、一個寬度和一個高度指定的矩形的內部。
FillRectangles填充由Rectangle結構指定的一系列矩形的內部。
FillRegion填充Region 對象的內部。
Flush 強制執行所有掛起的圖形操作并立即返回而不等待操作完成。
FromHdc 從設備上下文的指定句柄創建新的Graphics對象。
FromHwnd 從窗口的指定句柄創建新的Graphics對象。
FromImage 從指定的Image對象創建新Graphics對象。
GetHdc獲取與此Graphics對象關聯的設備上下文的句柄。
ReleaseHdc釋放通過以前對此Graphics對象GetHdc方法的調用獲得的設備上下文句柄。
ResetClip將此Graphics對象的剪輯區域重置為無限區域。
ResetTransform 將此Graphics對象的全局變換矩陣重置為單位矩陣。

           表01:Graphics類中的常用方法及其說明

  在本文中使用最多,也是最重要的方法就是:FillPie和DrawPie方法。這二個方法的具體使用方法,在下文中又詳細介紹。

屬性說明
Clip獲取或設置Region對象,該對象限定此Graphics對象的繪圖區域。
ClipBounds 獲取RectangleF結構,該結構限定此Graphics對象的剪輯區域。
DpiX 獲取此Graphics對象的水平分辨率。
DpiY獲取此Graphics對象的垂直分辨率。
PageScale 獲取或設置此Graphics對象的全局單位和頁單位之間的比例。
PageUnit 獲取或設置用于此Graphics對象中的頁坐標的度量單位。
PixelOffsetMode 獲取或設置一個值,該值指定在呈現此Graphics對象的過程中像素如何偏移。
RenderingOrigin 為抵色處理和陰影畫筆獲取或設置此Graphics對象的呈現原點。
SmoothingMode 獲取或設置此Graphics對象的呈現質量。
TextRenderingHint 獲取或設置與此Graphics對象關聯的文本的呈現模式。
Transform 獲取或設置此Graphics對象的全局變換。
VisibleClipBounds 獲取或設置此Graphics對象的可見剪輯區域的邊框。
             表02:Graphics類中的常用屬性及其說明

  (3).利用FillPie和DrawPie方法繪制扇型的具體方法:

  DrawPie方法功能是繪制一個扇型,下面是 DrawPie方法的一種調用語法,此語法也是本文中主要的調用方式,具體如下:

  public void DrawPie ( Pen , float , float , float , float , float , float ) ;

  此種DrawPie調用方法是由七個參數組成,這七個參數的具體說明如下:

  第一個參數:定義繪制扇型的畫筆類型;

  第二和第三個參數:定義扇型的坐標;

  第四和第五個參數:定義組成扇型的二個射線的長度;

  第六和第七個參數:定義扇型的開始角度和扇型旋轉的角度大小。其中把X坐標的正方向定為0度角,計算扇型的開始角度的按照順時針方向旋轉,最先到達的扇型的那條射線和0度角之間的夾角。

  下列代碼就是在ASP.NET頁面中繪制一個扇型:

Bitmap bm = new Bitmap ( 600 , 300 ) ;
//創建一個長度為600,寬帶為300的Bitmap實例
Graphics g ;
g = Graphics.FromImage ( bm ) ;
//由此Bitmap實例創建Graphic實例
g . Clear ( Color . Snow ) ;
g.DrawPie ( Pens.Red , 50 , 50 , 150 , 150 , 0 , 30 ) ;
 四.ASP.NET頁面中實現數據Pie圖實現步驟

  在實現數據Pie圖之前,首先要確保在C盤的根目錄存在"db.mdb"數據庫,并且此數據庫已經設定完畢,并且存在《在ASP.NET頁面中實現數據棒圖》一文中的數據。下面是ASP.NET實現數據Pie圖的具體步驟,開發工具使用的是Visual Studio .Net,采用的是C#語言。

  1. 啟動Visual Studio .Net。

  2. 選擇菜單【文件】|【新建】|【項目】后,彈出【新建項目】對話框。

  3. 將【項目類型】設置為【Visual C#項目】。

  4. 將【模板】設置為【ASP.NET Web 應用程序】。

  5. 在【位置】的文本框中輸入"http://localhost/Pie"。然后單擊【確定】按鈕,這樣在Visual Studio .Net就會在當前項目文件所在目錄中建立一個名稱為"Pie"文件夾,里面存放是此項目的項目文件,項目中的其他文件存放的位置是計算機Internet信息服務的默認的Web站點所在的目錄中新建的一個名稱為"WebPieDemo"的文件夾中
 6. 把Visual Studio .Net的當前窗口切換到WebForm的代碼編輯窗口,即:WebForm1.aspx.cs文件的編輯窗口。

  7. 在WebForm1.aspx.cs文件首部,用下列代碼替換WebForm1.aspx.cs中導入命名空間的代碼:
1//下面程序中使用的ImageFormat類所在的命名空間
2using?System?.?Drawing?.?Imaging?;
3//下面程序中使用到關于數據庫方面的類所在的命名空間
4using?System?.?Data?.?OleDb?;8. WebForm1.aspx.cs文件中的Page_Load事件處理代碼中添加下列代碼,下列代碼的作用是打開數據庫,讀取數據,并以此數據形成數據Pie圖:
??1private?void?Page_Load(object?sender,?System.EventArgs?e)
??2????????{
??3????????????//?在此處放置用戶代碼以初始化頁面
??4????????????string?sRouter?=?"c:\\db2.mdb"?;
??5
??6????????????//獲得當前Access數據庫在服務器端的絕對路徑
??7????????????string?strCon?=?"?Provider?=?Microsoft.Jet.OLEDB.4.0;?Data?Source?=?"?+?sRouter?;
??8
??9????????????//創建一個數據庫連接
?10????????????OleDbConnection?myConn?=?new?OleDbConnection?(?strCon?)?;
?11????????????string?strCom?=?"?SELECT?YF?,SL?FROM?MonthSale?ORDER?BY?YF"?;
?12????????????myConn.Open?(?)?;
?13????????????OleDbCommand?myCommand?=?new?OleDbCommand?(?strCom?,?myConn?)?;
?14????????????OleDbDataReader?myOleDbDataReader?=?myCommand.ExecuteReader?(?)?;
?15????????????//創建OleDbDataReader實例,并以此實例來獲取數據庫中各條記錄數據
?16
?17????????????int?[?]?iXiaoSH?=?new?int?[?12?]?;
?18????????????//定義一個數組,用以存放從數據庫中讀取的銷售數據
?19
?20????????????string?[?]?sMoth?=?new?string?[?12?]?;
?21????????????//定義一個數組,用以存放從數據庫中讀取的銷售月份
?22
?23????????????int?iIndex?=?0?;
?24????????????while?(?myOleDbDataReader.Read?(?)?)?
?25????????????{
?26????????????????iXiaoSH?[?iIndex?]?=?myOleDbDataReader.GetInt32?(?1?)?;
?27????????????????sMoth?[?iIndex?]?=?myOleDbDataReader.GetInt32?(?0?)?.?ToString()?+?""?;
?28????????????????iIndex++?;
?29????????????}

?30????????????//讀取Table01數據表中的各條數據,并存放在先前定義的二個數組中
?31
?32????????????myConn?.?Close?(?)?;
?33????????????myOleDbDataReader?.?Close?(?)?;
?34?
?35????????????Bitmap?bm?=?new?Bitmap?(?600?,?300?)?;
?36????????????//創建一個長度為600,寬帶為300的Bitmap實例
?37
?38????????????Graphics?g?;
?39????????????g?=?Graphics.FromImage?(?bm?)?;
?40????????????g?.?Clear?(?Color?.?Snow?)?;
?41????????????g?.?DrawString?(?"?××公司××××年度銷售情況一覽表"?,?new?Font?(?"宋體"?,?16?)?,?Brushes?.?Black?,?new?Point?(?5?,?5?)?)?;
?42????????????//在繪畫圖面的指定位置,以指定的字體、指定的顏色繪制指定的字符串。即為圖表標題
?43
?44????????????//以下代碼是是實現圖01中的右上部區域
?45????????????//以上是在圖01中為下面繪制定位
?46????????????Point?myRec?=?new?Point?(?515?,?30?)?;
?47????????????Point?myDec?=?new?Point?(?540?,?30?)?;
?48????????????Point?myTxt?=?new?Point?(?565?,?30?)?;
?49????????????g?.?DrawString?(?"單位:萬套"?,?new?Font?(?"宋體"?,?9?)?,?Brushes?.?Black?,?new?Point?(?515?,?12?)?)?;
?50????????????for?(?int?i?=?0?;?i?<?sMoth.Length?;?i++?)?
?51????????????{
?52????????????????g?.?FillRectangle?(?new?SolidBrush?(?GetColor?(?i?)?)?,?myRec?.?X?,?myRec?.?Y?,?20?,?10?)?;
?53????????????????//填充小方塊
?54
?55????????????????g?.?DrawRectangle?(?Pens.Black?,?myRec?.?X?,?myRec?.?Y?,?20?,?10?)?;
?56????????????????//繪制小方塊
?57
?58????????????????g?.?DrawString?(?sMoth?[?i?]?.?ToString?(?)?,?new?Font?(?"宋體",?9?)?,?Brushes?.?Black?,?myDec?)?;
?59????????????????//繪制小方塊右邊的文字
?60
?61????????????????g?.?DrawString?(?iXiaoSH[i].ToString?(),?new?Font?(?"宋體",?9?)?,?Brushes?.?Black?,?myTxt?)?;
?62????????????????myRec?.?Y?+=?15?;
?63????????????????myDec?.?Y?+=?15?;
?64????????????????myTxt?.?Y?+=?15?;
?65????????????}

?66
?67????????????//以下代碼是根據從數據庫中得到的數值大小,繪制扇型,并以相應色彩填充扇型,//從而構成圖01中的Pie圖
?68????????????int?iTatal?=?0?;?
?69????????????float?fCurrentAngle?=?0?;
?70????????????float?fStartAngle?=?0;
?71????????????for?(?int?i?=?0?;?i?<?iXiaoSH?.?Length?;?i++?)
?72????????????{
?73????????????????iTatal?=?iTatal?+?iXiaoSH?[?i?]?;
?74????????????}

?75????????????for?(?int?i?=?0?;?i?<?iXiaoSH?.?Length?;?i++?)
?76????????????{
?77????????????????//以下代碼是獲得要繪制扇型的開始角度
?78????????????????if?(?i?==?iXiaoSH?.?Length?-?1?)
?79????????????????{
?80????????????????????fCurrentAngle?=?360-?fStartAngle?;
?81????????????????}

?82????????????????else
?83????????????????{
?84????????????????????int?iTemp?=?iXiaoSH?[?i?]?;
?85????????????????????fCurrentAngle?=?(?iTemp?*?360?)?/?iTatal?;
?86????????????????}

?87????????????????//根據參數繪制扇型
?88
?89????????????????g.DrawPie?(?Pens.Black?,?100?,?40?,?250?,?250?,?fStartAngle?,?fCurrentAngle?)?;
?90????????????????//以指定色彩填充繪制的扇型
?91
?92????????????????g.FillPie?(?new?SolidBrush?(?GetColor?(?i?)?)?,?100?,?40?,?250?,?250?,?fStartAngle?,?fCurrentAngle?)?;
?93????????????????fStartAngle?+=?fCurrentAngle?;
?94????????????}

?95
?96????????????//畫出圖片的邊框
?97????????????Pen?p?=?new?Pen?(?Color.Black?,?2?)?;
?98????????????g?.?DrawRectangle?(?p?,?1?,?1?,?598?,?298?)?;
?99
100????????????//向客戶端輸出數據流,并以此數據流形成Jpeg圖片
101????????????bm.Save?(?Response?.?OutputStream?,?ImageFormat?.?Jpeg?)?;
102????????}

9. WebForm1.aspx.cs文件中的InitializeComponent過程之后,添加下列代碼,下列代碼的作用是定義一個名稱為GetColor函數,此函數的功能根據索引號得到相應的系統顏色:
?1/**////?<summary>
?2????????///?獲取顏色
?3????????///?</summary>
?4????????///?<param?name="itemIndex">數組的索引</param>
?5????????///?<returns></returns>

?6????????private?Color?GetColor?(?int?itemIndex?)?
?7????????{
?8 ????????????Color?MyColor?;
?9 ????????????int?i?=?itemIndex?;
10????????????switch?(i)?
11 ????????????{
12  ????????????????case?0?:
13   ????????????????MyColor?=?Color.Green;
14   ????????????????return?MyColor;
15  ????????????????case?1?:
16   ????????????????MyColor?=?Color.Red;
17   ?????????????????return?MyColor;
18  ????????????????case?2:
19   ????????????????MyColor?=?Color.Yellow;
20   ????????????????return?MyColor;
21  ????????????????case?3?:
22   ????????????????MyColor?=?Color.Blue;
23   ????????????????return?MyColor;
24  ????????????????case?4?:
25   ????????????????MyColor?=?Color.Orange;
26   ????????????????return?MyColor;
27???????  ????????case?5?:
28   ????????????????MyColor?=?Color.Aqua;
29   ????????????????return?MyColor;
30  ????????????????case?6:
31   ????????????????MyColor?=?Color.SkyBlue;
32   ????????????????return?MyColor;
33  ????????????????case?7:
34   ????????????????MyColor?=?Color.DeepPink;
35   ????????????????return?MyColor;
36  ????????????????case?8:
37   ????????????????MyColor?=?Color.Azure;
38   ????????????????return?MyColor;
39  ????????????????case?9:
40   ????????????????MyColor?=?Color.Brown;
41   ????????????????return?MyColor;
42  ????????????????case?10:
43   ????????????????MyColor?=?Color.Pink;
44   ????????????????return?MyColor;
45  ????????????????case?11:
46   ????????????????MyColor?=?Color.BurlyWood;
47   ????????????????return?MyColor;
48  ????????????????case?12:
49   ????????????????MyColor?=?Color.Chartreuse;
50   ????????????????return?MyColor;
51  ????????????????default:
52   ????????????????MyColor?=?Color.Pink;
53   ????????????????return?MyColor;
54????????????}

55????????}

至此,在上述步驟都正確執行后,在ASP.NET頁面中實現數據Pie圖的全部工作就完成了。此時單擊快捷鍵F5,就可以得到如圖01所示的數據Pie圖了。

  五.總結:

  由于ASP.NET提供了豐富的繪圖功能,所以結合這二篇文章的介紹,我想再實現其他的數據圖表,應該也不算很困難。

完整的例子代碼:
??1using?System;
??2using?System.Collections;
??3using?System.ComponentModel;
??4using?System.Data;
??5using?System.Drawing;
??6using?System.Web;
??7using?System.Web.SessionState;
??8using?System.Web.UI;
??9using?System.Web.UI.WebControls;
?10using?System.Web.UI.HtmlControls;
?11//下面程序中使用的ImageFormat類所在的命名空間
?12using?System?.?Drawing?.?Imaging?;
?13//下面程序中使用到關于數據庫方面的類所在的命名空間
?14using?System?.?Data?.?OleDb?;
?15
?16
?17namespace?WebPieDemo
?18{
?19????/**////?<summary>
?20????///?WebForm1?的摘要說明。
?21????///?</summary>

?22????public?class?WebForm1?:?System.Web.UI.Page
?23????{
?24????????private?void?Page_Load(object?sender,?System.EventArgs?e)
?25????????{
?26????????????//?在此處放置用戶代碼以初始化頁面
?27????????????string?sRouter?=?"c:\\db2.mdb"?;
?28
?29????????????//獲得當前Access數據庫在服務器端的絕對路徑
?30????????????string?strCon?=?"?Provider?=?Microsoft.Jet.OLEDB.4.0;?Data?Source?=?"?+?sRouter?;
?31
?32????????????//創建一個數據庫連接
?33????????????OleDbConnection?myConn?=?new?OleDbConnection?(?strCon?)?;
?34????????????string?strCom?=?"?SELECT?YF?,SL?FROM?MonthSale?ORDER?BY?YF"?;
?35????????????myConn.Open?(?)?;
?36????????????OleDbCommand?myCommand?=?new?OleDbCommand?(?strCom?,?myConn?)?;
?37????????????OleDbDataReader?myOleDbDataReader?=?myCommand.ExecuteReader?(?)?;
?38????????????//創建OleDbDataReader實例,并以此實例來獲取數據庫中各條記錄數據
?39
?40????????????int?[?]?iXiaoSH?=?new?int?[?12?]?;
?41????????????//定義一個數組,用以存放從數據庫中讀取的銷售數據
?42
?43????????????string?[?]?sMoth?=?new?string?[?12?]?;
?44????????????//定義一個數組,用以存放從數據庫中讀取的銷售月份
?45
?46????????????int?iIndex?=?0?;
?47????????????while?(?myOleDbDataReader.Read?(?)?)?
?48????????????{
?49????????????????iXiaoSH?[?iIndex?]?=?myOleDbDataReader.GetInt32?(?1?)?;
?50????????????????sMoth?[?iIndex?]?=?myOleDbDataReader.GetInt32?(?0?)?.?ToString()?+?""?;
?51????????????????iIndex++?;
?52????????????}

?53????????????//讀取Table01數據表中的各條數據,并存放在先前定義的二個數組中
?54
?55????????????myConn?.?Close?(?)?;
?56????????????myOleDbDataReader?.?Close?(?)?;
?57?
?58????????????Bitmap?bm?=?new?Bitmap?(?600?,?300?)?;
?59????????????//創建一個長度為600,寬帶為300的Bitmap實例
?60
?61????????????Graphics?g?;
?62????????????g?=?Graphics.FromImage?(?bm?)?;
?63????????????g?.?Clear?(?Color?.?Snow?)?;
?64????????????g?.?DrawString?(?"?××公司××××年度銷售情況一覽表"?,?new?Font?(?"宋體"?,?16?)?,?Brushes?.?Black?,?new?Point?(?5?,?5?)?)?;
?65????????????//在繪畫圖面的指定位置,以指定的字體、指定的顏色繪制指定的字符串。即為圖表標題
?66
?67????????????//以下代碼是是實現圖01中的右上部區域
?68????????????//以上是在圖01中為下面繪制定位
?69????????????Point?myRec?=?new?Point?(?515?,?30?)?;
?70????????????Point?myDec?=?new?Point?(?540?,?30?)?;
?71????????????Point?myTxt?=?new?Point?(?565?,?30?)?;
?72????????????g?.?DrawString?(?"單位:萬套"?,?new?Font?(?"宋體"?,?9?)?,?Brushes?.?Black?,?new?Point?(?515?,?12?)?)?;
?73????????????for?(?int?i?=?0?;?i?<?sMoth.Length?;?i++?)?
?74????????????{
?75????????????????g?.?FillRectangle?(?new?SolidBrush?(?GetColor?(?i?)?)?,?myRec?.?X?,?myRec?.?Y?,?20?,?10?)?;
?76????????????????//填充小方塊
?77
?78????????????????g?.?DrawRectangle?(?Pens.Black?,?myRec?.?X?,?myRec?.?Y?,?20?,?10?)?;
?79????????????????//繪制小方塊
?80
?81????????????????g?.?DrawString?(?sMoth?[?i?]?.?ToString?(?)?,?new?Font?(?"宋體",?9?)?,?Brushes?.?Black?,?myDec?)?;
?82????????????????//繪制小方塊右邊的文字
?83
?84????????????????g?.?DrawString?(?iXiaoSH[i].ToString?(),?new?Font?(?"宋體",?9?)?,?Brushes?.?Black?,?myTxt?)?;
?85????????????????myRec?.?Y?+=?15?;
?86????????????????myDec?.?Y?+=?15?;
?87????????????????myTxt?.?Y?+=?15?;
?88????????????}

?89
?90????????????//以下代碼是根據從數據庫中得到的數值大小,繪制扇型,并以相應色彩填充扇型,//從而構成圖01中的Pie圖
?91????????????int?iTatal?=?0?;?
?92????????????float?fCurrentAngle?=?0?;
?93????????????float?fStartAngle?=?0;
?94????????????for?(?int?i?=?0?;?i?<?iXiaoSH?.?Length?;?i++?)
?95????????????{
?96????????????????iTatal?=?iTatal?+?iXiaoSH?[?i?]?;
?97????????????}

?98????????????for?(?int?i?=?0?;?i?<?iXiaoSH?.?Length?;?i++?)
?99????????????{
100????????????????//以下代碼是獲得要繪制扇型的開始角度
101????????????????if?(?i?==?iXiaoSH?.?Length?-?1?)
102????????????????{
103????????????????????fCurrentAngle?=?360-?fStartAngle?;
104????????????????}

105????????????????else
106????????????????{
107????????????????????int?iTemp?=?iXiaoSH?[?i?]?;
108????????????????????fCurrentAngle?=?(?iTemp?*?360?)?/?iTatal?;
109????????????????}

110????????????????//根據參數繪制扇型
111
112????????????????g.DrawPie?(?Pens.Black?,?100?,?40?,?250?,?250?,?fStartAngle?,?fCurrentAngle?)?;
113????????????????//以指定色彩填充繪制的扇型
114
115????????????????g.FillPie?(?new?SolidBrush?(?GetColor?(?i?)?)?,?100?,?40?,?250?,?250?,?fStartAngle?,?fCurrentAngle?)?;
116????????????????fStartAngle?+=?fCurrentAngle?;
117????????????}

118
119????????????//畫出圖片的邊框
120????????????Pen?p?=?new?Pen?(?Color.Black?,?2?)?;
121????????????g?.?DrawRectangle?(?p?,?1?,?1?,?598?,?298?)?;
122
123????????????//向客戶端輸出數據流,并以此數據流形成Jpeg圖片
124????????????bm.Save?(?Response?.?OutputStream?,?ImageFormat?.?Jpeg?)?;
125????????}

126
127????????Web?窗體設計器生成的代碼#region?Web?窗體設計器生成的代碼
128????????override?protected?void?OnInit(EventArgs?e)
129????????{
130????????????//
131????????????//?CODEGEN:?該調用是?ASP.NET?Web?窗體設計器所必需的。
132????????????//
133????????????InitializeComponent();
134????????????base.OnInit(e);
135????????}

136????????
137????????/**////?<summary>
138????????///?設計器支持所需的方法?-?不要使用代碼編輯器修改
139????????///?此方法的內容。
140????????///?</summary>

141????????private?void?InitializeComponent()
142????????{????
143????????????this.Load?+=?new?System.EventHandler(this.Page_Load);
144????????}

145????????#endregion

146
147????????/**////?<summary>
148????????///?獲取顏色
149????????///?</summary>
150????????///?<param?name="itemIndex">數組的索引</param>
151????????///?<returns></returns>

152????????private?Color?GetColor?(?int?itemIndex?)?
153????????{
154 ????????????Color?MyColor?;
155 ????????????int?i?=?itemIndex?;
156????????????switch?(i)?
157 ????????????{
158  ????????????????case?0?:
159   ????????????????MyColor?=?Color.Green;
160   ????????????????return?MyColor;
161  ????????????????case?1?:
162   ????????????????MyColor?=?Color.Red;
163   ?????????????????return?MyColor;
164  ????????????????case?2:
165   ????????????????MyColor?=?Color.Yellow;
166   ????????????????return?MyColor;
167  ????????????????case?3?:
168   ????????????????MyColor?=?Color.Blue;
169   ????????????????return?MyColor;
170  ????????????????case?4?:
171   ????????????????MyColor?=?Color.Orange;
172   ????????????????return?MyColor;
173???????  ????????case?5?:
174   ????????????????MyColor?=?Color.Aqua;
175   ????????????????return?MyColor;
176  ????????????????case?6:
177   ????????????????MyColor?=?Color.SkyBlue;
178   ????????????????return?MyColor;
179  ????????????????case?7:
180   ????????????????MyColor?=?Color.DeepPink;
181   ????????????????return?MyColor;
182  ????????????????case?8:
183   ????????????????MyColor?=?Color.Azure;
184   ????????????????return?MyColor;
185  ????????????????case?9:
186   ????????????????MyColor?=?Color.Brown;
187   ????????????????return?MyColor;
188  ????????????????case?10:
189   ????????????????MyColor?=?Color.Pink;
190   ????????????????return?MyColor;
191  ????????????????case?11:
192   ????????????????MyColor?=?Color.BurlyWood;
193   ????????????????return?MyColor;
194  ????????????????case?12:
195   ????????????????MyColor?=?Color.Chartreuse;
196   ????????????????return?MyColor;
197  ????????????????default:
198   ????????????????MyColor?=?Color.Pink;
199   ????????????????return?MyColor;
200????????????}

201????????}

202????}

203}

204

轉載于:https://www.cnblogs.com/Terrylee/archive/2005/10/12/253099.html

總結

以上是生活随笔為你收集整理的在Asp.net页面中实现数据饼图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。