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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

在ASP.NET页面中实现数据柱状图

發(fā)布時間:2025/3/21 asp.net 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在ASP.NET页面中实现数据柱状图 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
棒圖有時又稱為"Bar"圖,在ASP.NET中擁有了一個新功能--繪圖功能,通過此功能就能夠按照要實(shí)現(xiàn)的圖表的模樣來繪制,最后在客戶端的瀏覽器中形成一個圖片,從而顯示出圖表來。

  本文就是介紹在ASP.NET頁面中實(shí)現(xiàn)Bar圖的具體方法。希望本篇文章能夠讓您領(lǐng)會到ASP.NET中強(qiáng)大的繪圖功能,而我們知道圖表只有在和數(shù)據(jù)庫關(guān)聯(lián)以后,才能夠顯示出更強(qiáng)大的優(yōu)勢。下面就來介紹在ASP.NET頁面中從數(shù)據(jù)庫中提起數(shù)據(jù),并以此數(shù)據(jù)形成Bar圖的具體實(shí)現(xiàn)方法。

 一.本文程序設(shè)計(jì)和運(yùn)行的軟件環(huán)境:

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

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

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

  二.建立數(shù)據(jù)源

  為了方便起見,本文選擇的數(shù)據(jù)庫類型為本地?cái)?shù)據(jù)庫--Access 2000,如果你使用的是其他數(shù)據(jù)庫類型,只需對下面介紹的程序中的關(guān)于數(shù)據(jù)庫連接的代碼進(jìn)行相應(yīng)的修改就可以了。Access數(shù)據(jù)庫名稱為"db2.mdb",在此數(shù)據(jù)庫中只定義了一張數(shù)據(jù)表"MonthSale",此表的結(jié)構(gòu)如表01所示:

字段名稱類型 說明
ID自動編號 主鍵 ,遞增
YF 數(shù)字銷售月份
SL數(shù)字 銷量
         表01:MonthSale數(shù)據(jù)表的結(jié)構(gòu)

  在定義完"db2.mdb"數(shù)據(jù)庫中的"MonthSale"數(shù)據(jù)表后,在MonthSale數(shù)據(jù)表中按照表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:Table01數(shù)據(jù)表中的記錄情況

  在MonthSale數(shù)據(jù)表中添加完這12條記錄后,保存"db2.mdb"數(shù)據(jù)庫到C盤的根目錄中。
三.ASP.NET頁面中實(shí)現(xiàn)數(shù)據(jù)Bar圖的關(guān)鍵步驟及其實(shí)現(xiàn)方法:

  在ASP.NET頁面中實(shí)現(xiàn)數(shù)據(jù)Bar圖首先必須解決二大問題:

  (1).首先要解決在ASP.NET頁面中實(shí)現(xiàn)數(shù)據(jù)庫連接和從數(shù)據(jù)庫中讀取數(shù)據(jù)的方法。

  程序要實(shí)現(xiàn)從數(shù)據(jù)庫中一條條的讀取數(shù)據(jù),則要使用OleDbDataReader類,OleDbDataReader類提供了從數(shù)據(jù)庫中逐條讀取數(shù)據(jù)的方法。下面代碼是連接C盤根目錄下的"db2.mdb"數(shù)據(jù)庫,逐條讀取MonthSale數(shù)據(jù)表中的記錄,并把數(shù)據(jù)存放到定義的二個數(shù)組中:
?1string?sRouter?=?"c:\\db2.mdb"?;
?2????????????//獲得當(dāng)前Access數(shù)據(jù)庫在服務(wù)器端的絕對路徑
?3
?4????????????string?strCon?=?"?Provider?=?Microsoft.Jet.OLEDB.4.0;?Data?Source?=?"?+?sRouter?;
?5????????????//創(chuàng)建一個數(shù)據(jù)庫連接
?6
?7????????????OleDbConnection?myConn?=?new?OleDbConnection?(?strCon?)?;
?8????????????string?strCom?=?"?SELECT?YF?,SL?FROM?MonthSale?ORDER?BY?YF"?;
?9????????????myConn.Open?(?)?;
10????????????OleDbCommand?myCommand?=?new?OleDbCommand?(?strCom?,?myConn?)?;
11????????????OleDbDataReader?myOleDbDataReader?=?myCommand.ExecuteReader?(?)?;
12????????????//創(chuàng)建OleDbDataReader實(shí)例,并以此實(shí)例來獲取數(shù)據(jù)庫中各條記錄數(shù)據(jù)
13
14????????????int?[?]?iXiaoSH?=?new?int?[?12?]?;
15????????????//定義一個數(shù)組,用以存放從數(shù)據(jù)庫中讀取的銷售數(shù)據(jù)
16
17????????????string?[?]?sMoth?=?new?string?[?12?]?;
18????????????//定義一個數(shù)組,用以存放從數(shù)據(jù)庫中讀取的銷售月份
19
20????????????int?iIndex?=?0?;
21????????????while?(?myOleDbDataReader.Read?(?)?)?
22????????????{
23????????????????iXiaoSH?[?iIndex?]?=?myOleDbDataReader.GetInt32?(?1?)?;
24????????????????sMoth?[?iIndex?]?=?myOleDbDataReader.GetInt32?(?0?)?.?ToString?(?)?+?""?;
25????????????????iIndex++?;
26????????????}

27????????????//讀取Table01數(shù)據(jù)表中的各條數(shù)據(jù),并存放在先前定義的二個數(shù)組中
28
29????????????myConn?.?Close?(?)?;
30????????????myOleDbDataReader?.?Close?(?)?;
31????????????//關(guān)閉各種資源
(2).根據(jù)得到數(shù)據(jù),繪制圖片,并顯示出來:

  通過第一步,已經(jīng)把從數(shù)據(jù)庫中的讀取的數(shù)據(jù)存放到"iXiaoSH"和"sMoth"數(shù)組中。下面就要解決依據(jù)這些數(shù)據(jù)繪制出Bar圖?首先先了解一下在ASP.NET頁面中將要實(shí)現(xiàn)的數(shù)據(jù)Bar圖的模樣。具體可如圖01所示:

圖01:在ASP.NET中實(shí)現(xiàn)的數(shù)據(jù)Bar圖

  程序中把圖01所示各個元素,按照區(qū)域分成了五個部分,這五個部分將在后面介紹的程序中分別實(shí)現(xiàn):

  1. 構(gòu)建整個圖片

  首先要創(chuàng)建一Bitmap實(shí)例,并以此來構(gòu)建一個Graphics實(shí)例,Graphics實(shí)例提供了各種繪制方法,這樣才能按照數(shù)據(jù)的要求在Bitmap實(shí)例上繪制各種圖形。下面代碼是在ASP.NET中創(chuàng)建Bitmap實(shí)例,并以此實(shí)例來構(gòu)建 Graphics實(shí)例的具體方法:
1Bitmap?bm?=?new?Bitmap?(?600?,?250?)?;
2????????????//創(chuàng)建一個長度為600,寬帶為250的Bitmap實(shí)例
3
4????????????Graphics?g?;
5????????????g?=?Graphics.FromImage?(?bm?)?;
6????????????//由此Bitmap實(shí)例創(chuàng)建Graphic實(shí)例
7
8????????????g?.?Clear?(?Color.Snow)?;
9????????????//用Snow色彩為背景色填充此繪畫圖面2. 圖01中的標(biāo)題部分文字:

  這是通過Graphics實(shí)例中提供的DrawString方法以指定的字體、顏色、在指定的位置繪制指定的字符串。下面代碼的作用是繪制圖01中標(biāo)題:
1g?.?DrawString?(?"?××公司××××年度銷售情況統(tǒng)計(jì)表"?,?new?Font?(?"黑體"?,?16?)?,?Brushes?.?Black?,?new?Point?(?5?,?5?)?)?;
2????????????//在繪畫圖面的指定位置,以指定的字體、指定的顏色繪制指定的字符串。即為圖表標(biāo)題
33. 圖01中的提示區(qū)域,即圖01中的右上角顯示的內(nèi)容:

  要繪制這部分內(nèi)容首先要定位,可以把這部分要繪制的內(nèi)容分成三個小部分:

  其一,是圖01中的"單位:萬套"文字,這部分處理起來比較簡單,當(dāng)選定要在圖片中輸出的文字坐標(biāo)后,調(diào)用Graphics實(shí)例中提供的DrawString方法就可以了;
  
  其二,是繪制圖01中的小方塊,首先要調(diào)用Graphics實(shí)例中的DrawRectangle方法在指定位置,以指定的顏色,繪制指定大小的方塊,然后再條約Graphics實(shí)例中的FillRectangle填充這個小方塊就完成了;

  其三,是繪制小方塊右邊的文字。同樣要使用Graphics實(shí)例中提供的DrawString方法,只不過位置坐標(biāo)和字體要進(jìn)行相應(yīng)改變罷了。下面代碼功能是繪制圖01右上角顯示的內(nèi)容:
?1//以下代碼是是實(shí)現(xiàn)圖右上部
?2????????????Point?myRec?=?new?Point?(?535?,?30?)?;
?3????????????Point?myDec?=?new?Point?(?560?,?26?)?;
?4
?5????????????//以上是在圖01中為下面繪制定位
?6????????????g?.?DrawString?(?"單位:萬套"?,?new?Font?(?"宋體"?,?9?)?,?Brushes?.?Black?,?new?Point?(?525?,?12?)?)?;
?7???
?8???
?9????????????for?(?int?i?=?0?;?i?<?sMoth.Length?;?i++?)?
10????????????{
11????????????????g?.?DrawRectangle?(?Pens.Black?,?myRec?.?X?,?myRec?.?Y?,?20?,?10?)?;
12????????????????//繪制小方塊
13
14????????????????g?.?FillRectangle?(?new?SolidBrush?(?GetColor?(?i?)?)?,?myRec.X?,?myRec.Y?,?20?,?10?)?;
15????????????????//填充小方塊
16
17????????????????g?.?DrawString?(?sMoth?[?i?]?.?ToString?(?)?,?new?Font?(?"宋體"?,?9?)?,?Brushes?.?Black?,?myDec?)?;
18????????????????//繪制小方塊右邊的文字
19
20????????????????myRec?.?Y?+=?15?;
21????????????????myDec?.?Y?+=?15?;
22????????????}


4. 根據(jù)從數(shù)據(jù)庫中讀取的數(shù)據(jù),繪制數(shù)據(jù)Bar圖:

  此部分與第三部分比較類似,最主要的區(qū)別在于,繪制的位置不相同,下面代碼是在圖01中繪制數(shù)據(jù)Bar圖,并提示Bar圖所代表的數(shù)量:

?

?1//以下代碼是繪制Bar圖,及其銷售數(shù)量
?2????????????int?iBarWidth?=?40?;
?3????????????int?scale?=?10?;
?4????????????for?(?int?i?=?0?;?i?<?iXiaoSH?.?Length?;?i++?)?
?5????????????{
?6????????????????g?.?DrawRectangle?(?Pens.Black,?(?i?*?iBarWidth?)?+?15?,?250?-?(?iXiaoSH?[?i?]?*?scale?)?,?20?,?(?iXiaoSH?[?i?]?*?scale?)?+?5?)?;
?7????????????????//繪制Bar圖
?8
?9????????????????g?.?FillRectangle?(?new?SolidBrush?(GetColor?(?i?))?,?(?i?*?iBarWidth?)?+?15?,?250?-?(?iXiaoSH?[?i?]?*?scale?)?,?20?,?(?iXiaoSH?[?i?]?*?scale?)?+?5?)?;
10????????????????//以指定的色彩填充Bar圖
11
12????????????????g?.?DrawString?(?iXiaoSH?[?i?]?.?ToString?(?)?,?new?Font?(?"宋體"?,?9?)?,?Brushes?.?Black?,?(?i?*?iBarWidth?)?+?20?,?235?-?(?iXiaoSH?[?i?]?*?scale?)?)?;
13????????????????//顯示Bar圖代表的數(shù)據(jù)
14????????????}
5. 繪制圖片邊框,并形成Jpeg文件格式在客戶端顯示:

  繪制圖片邊框,使用的Graphics實(shí)例中的DrawRectangle方法。至于采用Jpeg格式文件在客戶端顯示,是因?yàn)镴peg文件占用的空間較小,利于網(wǎng)絡(luò)傳送。下面代碼是繪制圖01中的邊框,并形成Jpeg文件:
1//以下代碼是繪制邊框,并形成Jpeg文件,供瀏覽器顯示出來
2????????????Pen?p?=?new?Pen?(?Color.Black?,?2?)?;
3????????????g?.?DrawRectangle?(?p?,?1?,?1?,?598?,?248?)?;
4????????????bm.Save?(?Response?.?OutputStream?,?ImageFormat.Gif)?;
四.ASP.NET頁面中實(shí)現(xiàn)數(shù)據(jù)Bar圖實(shí)現(xiàn)步驟:

  掌握了上面的關(guān)鍵步驟及其解決方法后,在ASP.NET實(shí)現(xiàn)數(shù)據(jù)Bar相對就容易許多了,下面是ASP.NET頁面中實(shí)現(xiàn)數(shù)據(jù)Bar圖的具體實(shí)現(xiàn)步驟,在開發(fā)工具上選用的是Visual Stuido .Net企業(yè)構(gòu)建版,采用的開發(fā)語言是C#。

  1. 啟動Visual Studio .Net

  2. 選擇菜單【文件】|【新建】|【項(xiàng)目】后,彈出【新建項(xiàng)目】對話框

  3. 將【項(xiàng)目類型】設(shè)置為【Visual C#項(xiàng)目】

  4. 將【模板】設(shè)置為【ASP.NET Web 應(yīng)用程序】

  5. 在【位置】的文本框中輸入"http://localhost/Bar"。然后單擊【確定】按鈕,這樣在Visual Studio .Net就會在當(dāng)前項(xiàng)目文件所在目錄中建立一個名稱為"WebBarDemo"文件夾,里面存放是此項(xiàng)目的項(xiàng)目文件,項(xiàng)目中的其他文件存放的位置是計(jì)算機(jī)Internet信息服務(wù)的默認(rèn)的Web站點(diǎn)所在的目錄中新建的一個名稱為"WebBarDemo"的文件夾中。具體如圖02所示:

 圖02:新建一個ASP.NET項(xiàng)目對話框

  6. 把Visual Studio .Net的當(dāng)前窗口切換到WebForm的代碼編輯窗口,即:WebForm1.aspx.cs文件的編輯窗口。

  7. 在WebForm1.aspx.cs文件首部,用下列代碼替換WebForm1.aspx.cs中導(dǎo)入命名空間的代碼
1//下面程序中使用的ImageFormat類所在的命名空間
2using?System.Drawing.Imaging;
3//下面程序中使用到關(guān)于數(shù)據(jù)庫方面的類所在的命名空間
4using?System.Data.OleDb; 8. WebForm1.aspx.cs文件中的Page_Load事件處理代碼中添加下列代碼,下列代碼的作用是打開數(shù)據(jù)庫,讀取數(shù)據(jù),并以此數(shù)據(jù)形成數(shù)據(jù)Bar圖:

?1private?void?Page_Load(object?sender,?System.EventArgs?e)
?2????????{
?3????????????//?在此處放置用戶代碼以初始化頁面
?4
?5????????????string?sRouter?=?"c:\\db2.mdb"?;
?6????????????//獲得當(dāng)前Access數(shù)據(jù)庫在服務(wù)器端的絕對路徑
?7
?8????????????string?strCon?=?"?Provider?=?Microsoft.Jet.OLEDB.4.0;?Data?Source?=?"?+?sRouter?;
?9????????????//創(chuàng)建一個數(shù)據(jù)庫連接
10
11????????????OleDbConnection?myConn?=?new?OleDbConnection?(?strCon?)?;
12????????????string?strCom?=?"?SELECT?YF?,SL?FROM?MonthSale?ORDER?BY?YF"?;
13????????????myConn.Open?(?)?;
14????????????OleDbCommand?myCommand?=?new?OleDbCommand?(?strCom?,?myConn?)?;
15????????????OleDbDataReader?myOleDbDataReader?=?myCommand.ExecuteReader?(?)?;
16????????????//創(chuàng)建OleDbDataReader實(shí)例,并以此實(shí)例來獲取數(shù)據(jù)庫中各條記錄數(shù)據(jù)
17
18????????????int?[?]?iXiaoSH?=?new?int?[?12?]?;
19????????????//定義一個數(shù)組,用以存放從數(shù)據(jù)庫中讀取的銷售數(shù)據(jù)
20
21????????????string?[?]?sMoth?=?new?string?[?12?]?;
22????????????//定義一個數(shù)組,用以存放從數(shù)據(jù)庫中讀取的銷售月份
23
24????????????int?iIndex?=?0?;
25????????????while?(?myOleDbDataReader.Read?(?)?)?
26????????????{
27????????????????iXiaoSH?[?iIndex?]?=?myOleDbDataReader.GetInt32?(?1?)?;
28????????????????sMoth?[?iIndex?]?=?myOleDbDataReader.GetInt32?(?0?)?.?ToString?(?)?+?""?;
29????????????????iIndex++?;
30????????????}

31????????????//讀取Table01數(shù)據(jù)表中的各條數(shù)據(jù),并存放在先前定義的二個數(shù)組中
32
33????????????myConn?.?Close?(?)?;
34????????????myOleDbDataReader?.?Close?(?)?;
35????????????//關(guān)閉各種資源
36
37????????????Bitmap?bm?=?new?Bitmap?(?600?,?250?)?;
38????????????//創(chuàng)建一個長度為600,寬帶為250的Bitmap實(shí)例
39
40????????????Graphics?g?;
41????????????g?=?Graphics.FromImage?(?bm?)?;
42????????????//由此Bitmap實(shí)例創(chuàng)建Graphic實(shí)例
43
44????????????g?.?Clear?(?Color.Snow)?;
45????????????//用Snow色彩為背景色填充此繪畫圖面
46
47????????????g?.?DrawString?(?"?××公司××××年度銷售情況統(tǒng)計(jì)表"?,?new?Font?(?"黑體"?,?16?)?,?Brushes?.?Black?,?new?Point?(?5?,?5?)?)?;
48????????????//在繪畫圖面的指定位置,以指定的字體、指定的顏色繪制指定的字符串。即為圖表標(biāo)題
49
50????????????//以下代碼是是實(shí)現(xiàn)圖右上部
51????????????Point?myRec?=?new?Point?(?535?,?30?)?;
52????????????Point?myDec?=?new?Point?(?560?,?26?)?;
53
54????????????//以上是在圖01中為下面繪制定位
55????????????g?.?DrawString?(?"單位:萬套"?,?new?Font?(?"宋體"?,?9?)?,?Brushes?.?Black?,?new?Point?(?525?,?12?)?)?;
56???
57???
58????????????for?(?int?i?=?0?;?i?<?sMoth.Length?;?i++?)?
59????????????{
60????????????????g?.?DrawRectangle?(?Pens.Black?,?myRec?.?X?,?myRec?.?Y?,?20?,?10?)?;
61????????????????//繪制小方塊
62
63????????????????g?.?FillRectangle?(?new?SolidBrush?(?GetColor?(?i?)?)?,?myRec.X?,?myRec.Y?,?20?,?10?)?;
64????????????????//填充小方塊
65
66????????????????g?.?DrawString?(?sMoth?[?i?]?.?ToString?(?)?,?new?Font?(?"宋體"?,?9?)?,?Brushes?.?Black?,?myDec?)?;
67????????????????//繪制小方塊右邊的文字
68
69????????????????myRec?.?Y?+=?15?;
70????????????????myDec?.?Y?+=?15?;
71????????????}

72
73????????????//以下代碼是繪制Bar圖,及其銷售數(shù)量
74????????????int?iBarWidth?=?40?;
75????????????int?scale?=?10?;
76????????????for?(?int?i?=?0?;?i?<?iXiaoSH?.?Length?;?i++?)?
77????????????{
78????????????????g?.?DrawRectangle?(?Pens.Black,?(?i?*?iBarWidth?)?+?15?,?250?-?(?iXiaoSH?[?i?]?*?scale?)?,?20?,?(?iXiaoSH?[?i?]?*?scale?)?+?5?)?;
79????????????????//繪制Bar圖
80
81????????????????g?.?FillRectangle?(?new?SolidBrush?(GetColor?(?i?))?,?(?i?*?iBarWidth?)?+?15?,?250?-?(?iXiaoSH?[?i?]?*?scale?)?,?20?,?(?iXiaoSH?[?i?]?*?scale?)?+?5?)?;
82????????????????//以指定的色彩填充Bar圖
83
84????????????????g?.?DrawString?(?iXiaoSH?[?i?]?.?ToString?(?)?,?new?Font?(?"宋體"?,?9?)?,?Brushes?.?Black?,?(?i?*?iBarWidth?)?+?20?,?235?-?(?iXiaoSH?[?i?]?*?scale?)?)?;
85????????????????//顯示Bar圖代表的數(shù)據(jù)
86????????????}

87
88????????????//以下代碼是繪制邊框,并形成Jpeg文件,供瀏覽器顯示出來
89????????????Pen?p?=?new?Pen?(?Color.Black?,?2?)?;
90????????????g?.?DrawRectangle?(?p?,?1?,?1?,?598?,?248?)?;
91????????????bm.Save?(?Response?.?OutputStream?,?ImageFormat.Gif)?;
92????????}

9. WebForm1.aspx.cs文件中的InitializeComponent過程之后,添加下列代碼,下列代碼的作用是定義一個名稱為GetColor函數(shù),此函數(shù)的功能根據(jù)索引號得到相應(yīng)的系統(tǒng)顏色:
?1/**////?<summary>
?2????????///?獲取顏色
?3????????///?</summary>
?4????????///?<param?name="itemIndex">數(shù)組的索引</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????????}

10. 至此,在上述步驟都正確執(zhí)行后,在ASP.NET頁面中實(shí)現(xiàn)數(shù)據(jù)Bar圖的全部工作就完成了。在確定上面建立的Access數(shù)據(jù)庫"db.mdb"位于C盤的根目錄中之后,單擊快捷鍵F5,就可以得到如圖01所示的數(shù)據(jù)Bar圖了。

  五.總結(jié):

  在ASP.NET頁面中實(shí)現(xiàn)各種圖表,其所使用的就是ASP.NET的繪圖功能,而這一功能是ASP.NET的前一個版本所不具備的。上面的這些介紹,不僅介紹了在ASP.NET繪制各種圖片的方法,還介紹了數(shù)據(jù)庫連接和從數(shù)據(jù)庫中逐條讀取記錄的方法。這些方法對您了解和掌握在ASP.NET中操作數(shù)據(jù)庫是非常有用的。

完整的例子程序:
??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
?12//下面程序中使用的ImageFormat類所在的命名空間
?13using?System.Drawing.Imaging;
?14//下面程序中使用到關(guān)于數(shù)據(jù)庫方面的類所在的命名空間
?15using?System.Data.OleDb;
?16
?17namespace?WebBarDemo
?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
?28????????????string?sRouter?=?"c:\\db2.mdb"?;
?29????????????//獲得當(dāng)前Access數(shù)據(jù)庫在服務(wù)器端的絕對路徑
?30
?31????????????string?strCon?=?"?Provider?=?Microsoft.Jet.OLEDB.4.0;?Data?Source?=?"?+?sRouter?;
?32????????????//創(chuàng)建一個數(shù)據(jù)庫連接
?33
?34????????????OleDbConnection?myConn?=?new?OleDbConnection?(?strCon?)?;
?35????????????string?strCom?=?"?SELECT?YF?,SL?FROM?MonthSale?ORDER?BY?YF"?;
?36????????????myConn.Open?(?)?;
?37????????????OleDbCommand?myCommand?=?new?OleDbCommand?(?strCom?,?myConn?)?;
?38????????????OleDbDataReader?myOleDbDataReader?=?myCommand.ExecuteReader?(?)?;
?39????????????//創(chuàng)建OleDbDataReader實(shí)例,并以此實(shí)例來獲取數(shù)據(jù)庫中各條記錄數(shù)據(jù)
?40
?41????????????int?[?]?iXiaoSH?=?new?int?[?12?]?;
?42????????????//定義一個數(shù)組,用以存放從數(shù)據(jù)庫中讀取的銷售數(shù)據(jù)
?43
?44????????????string?[?]?sMoth?=?new?string?[?12?]?;
?45????????????//定義一個數(shù)組,用以存放從數(shù)據(jù)庫中讀取的銷售月份
?46
?47????????????int?iIndex?=?0?;
?48????????????while?(?myOleDbDataReader.Read?(?)?)?
?49????????????{
?50????????????????iXiaoSH?[?iIndex?]?=?myOleDbDataReader.GetInt32?(?1?)?;
?51????????????????sMoth?[?iIndex?]?=?myOleDbDataReader.GetInt32?(?0?)?.?ToString?(?)?+?""?;
?52????????????????iIndex++?;
?53????????????}

?54????????????//讀取Table01數(shù)據(jù)表中的各條數(shù)據(jù),并存放在先前定義的二個數(shù)組中
?55
?56????????????myConn?.?Close?(?)?;
?57????????????myOleDbDataReader?.?Close?(?)?;
?58????????????//關(guān)閉各種資源
?59
?60????????????Bitmap?bm?=?new?Bitmap?(?600?,?250?)?;
?61????????????//創(chuàng)建一個長度為600,寬帶為250的Bitmap實(shí)例
?62
?63????????????Graphics?g?;
?64????????????g?=?Graphics.FromImage?(?bm?)?;
?65????????????//由此Bitmap實(shí)例創(chuàng)建Graphic實(shí)例
?66
?67????????????g?.?Clear?(?Color.Snow)?;
?68????????????//用Snow色彩為背景色填充此繪畫圖面
?69
?70????????????g?.?DrawString?(?"?××公司××××年度銷售情況統(tǒng)計(jì)表"?,?new?Font?(?"黑體"?,?16?)?,?Brushes?.?Black?,?new?Point?(?5?,?5?)?)?;
?71????????????//在繪畫圖面的指定位置,以指定的字體、指定的顏色繪制指定的字符串。即為圖表標(biāo)題
?72
?73????????????//以下代碼是是實(shí)現(xiàn)圖右上部
?74????????????Point?myRec?=?new?Point?(?535?,?30?)?;
?75????????????Point?myDec?=?new?Point?(?560?,?26?)?;
?76
?77????????????//以上是在圖01中為下面繪制定位
?78????????????g?.?DrawString?(?"單位:萬套"?,?new?Font?(?"宋體"?,?9?)?,?Brushes?.?Black?,?new?Point?(?525?,?12?)?)?;
?79???
?80???
?81????????????for?(?int?i?=?0?;?i?<?sMoth.Length?;?i++?)?
?82????????????{
?83????????????????g?.?DrawRectangle?(?Pens.Black?,?myRec?.?X?,?myRec?.?Y?,?20?,?10?)?;
?84????????????????//繪制小方塊
?85
?86????????????????g?.?FillRectangle?(?new?SolidBrush?(?GetColor?(?i?)?)?,?myRec.X?,?myRec.Y?,?20?,?10?)?;
?87????????????????//填充小方塊
?88
?89????????????????g?.?DrawString?(?sMoth?[?i?]?.?ToString?(?)?,?new?Font?(?"宋體"?,?9?)?,?Brushes?.?Black?,?myDec?)?;
?90????????????????//繪制小方塊右邊的文字
?91
?92????????????????myRec?.?Y?+=?15?;
?93????????????????myDec?.?Y?+=?15?;
?94????????????}

?95
?96????????????//以下代碼是繪制Bar圖,及其銷售數(shù)量
?97????????????int?iBarWidth?=?40?;
?98????????????int?scale?=?10?;
?99????????????for?(?int?i?=?0?;?i?<?iXiaoSH?.?Length?;?i++?)?
100????????????{
101????????????????g?.?DrawRectangle?(?Pens.Black,?(?i?*?iBarWidth?)?+?15?,?250?-?(?iXiaoSH?[?i?]?*?scale?)?,?20?,?(?iXiaoSH?[?i?]?*?scale?)?+?5?)?;
102????????????????//繪制Bar圖
103
104????????????????g?.?FillRectangle?(?new?SolidBrush?(GetColor?(?i?))?,?(?i?*?iBarWidth?)?+?15?,?250?-?(?iXiaoSH?[?i?]?*?scale?)?,?20?,?(?iXiaoSH?[?i?]?*?scale?)?+?5?)?;
105????????????????//以指定的色彩填充Bar圖
106
107????????????????g?.?DrawString?(?iXiaoSH?[?i?]?.?ToString?(?)?,?new?Font?(?"宋體"?,?9?)?,?Brushes?.?Black?,?(?i?*?iBarWidth?)?+?20?,?235?-?(?iXiaoSH?[?i?]?*?scale?)?)?;
108????????????????//顯示Bar圖代表的數(shù)據(jù)
109????????????}

110
111????????????//以下代碼是繪制邊框,并形成Jpeg文件,供瀏覽器顯示出來
112????????????Pen?p?=?new?Pen?(?Color.Black?,?2?)?;
113????????????g?.?DrawRectangle?(?p?,?1?,?1?,?598?,?248?)?;
114????????????bm.Save?(?Response?.?OutputStream?,?ImageFormat.Gif)?;
115????????}

116
117????????Web?窗體設(shè)計(jì)器生成的代碼#region?Web?窗體設(shè)計(jì)器生成的代碼
118????????override?protected?void?OnInit(EventArgs?e)
119????????{
120????????????//
121????????????//?CODEGEN:?該調(diào)用是?ASP.NET?Web?窗體設(shè)計(jì)器所必需的。
122????????????//
123????????????InitializeComponent();
124????????????base.OnInit(e);
125????????}

126????????
127????????/**////?<summary>
128????????///?設(shè)計(jì)器支持所需的方法?-?不要使用代碼編輯器修改
129????????///?此方法的內(nèi)容。
130????????///?</summary>

131????????private?void?InitializeComponent()
132????????{????
133????????????this.Load?+=?new?System.EventHandler(this.Page_Load);
134????????}

135????????#endregion

136????????
137????????/**////?<summary>
138????????///?獲取顏色
139????????///?</summary>
140????????///?<param?name="itemIndex">數(shù)組的索引</param>
141????????///?<returns></returns>

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

191????????}

192
193????}

194}

195

總結(jié)

以上是生活随笔為你收集整理的在ASP.NET页面中实现数据柱状图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。