国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

在ASP.NET中動態(tài)創(chuàng)建柱狀圖和餅圖

2024-07-10 12:57:13
字體:
供稿:網(wǎng)友
中國最大的web開發(fā)資源網(wǎng)站及技術(shù)社區(qū),
在應(yīng)用程序開發(fā)中,我們會經(jīng)常遇到把從數(shù)據(jù)源動態(tài)取回的數(shù)據(jù)用統(tǒng)計(jì)圖表現(xiàn)出來,在microsoft .net framework出現(xiàn)之前,我們采取的方法主要是編寫組件來完成這一任務(wù)。現(xiàn)在,利用microsoft .net framework提供的豐富的gdi+類和對象可以很輕松地實(shí)現(xiàn)這一功能。在本文中,我們就來看看在asp.net中如何動態(tài)創(chuàng)建常用的柱狀圖和餅圖。數(shù)據(jù)源有許多種,在本文里我們就以數(shù)組來進(jìn)行示例,但本例的方法很容易轉(zhuǎn)換成數(shù)據(jù)庫類型的數(shù)據(jù)源來進(jìn)行。

查看例子

第一步:創(chuàng)建一個新的asp.net項(xiàng)目。

打開microsoft visual studio .net,點(diǎn)擊“文件(file)”-“新建(new)”-“項(xiàng)目(project)”,打開“新建項(xiàng)目(new project)”對話框,在“項(xiàng)目類型(project types)”里選擇“visual basic 項(xiàng)目(projects)”,在“模板(templates)”里選擇“asp.net應(yīng)用程序(web application)”,在應(yīng)用程序地址里輸入:http://localhost/aspcharts,點(diǎn)擊“確定(ok)”按鈕,microsoft visual studio .net將會自動在wwwroot目錄下創(chuàng)建一個名為aspcharts的web工程。

第二步:為默認(rèn)起始頁編寫代碼(aspxchart.aspx)。

我們要在這個頁面里顯示動態(tài)創(chuàng)建的圖形,打開aspxchart.aspx的標(biāo)簽頁的“html”視圖,插入下面的代碼:



<html>
<body>
<form id="form1" method="post" runat="server">
<table width="517" border="0" height="255">
<tr>
<td align="middle"><img src="chart.aspx"></td>
</tr>
<tr>
<td height="20" align="middle">asp.net 中動態(tài)創(chuàng)建圖形范例</td>
</tr>
</table>
</form>
</body>
</html>

第三步:添加名為chart.aspx的web窗體頁。

打開“解決方案資源管理器(solution explorer)”,在“aspcharts項(xiàng)目”上點(diǎn)擊右鍵,選擇“添加(add)”-“添加新項(xiàng)(add new item)”,彈出“添加新項(xiàng)(add new item)”對話框,在右邊的“模板”里選擇“web 窗體”,在底下的名字輸入框了輸入“chart.aspx”,點(diǎn)擊“打開”按鈕。

第四步:為“chart.aspx”web 窗體頁添加代碼。

在“chart.aspx”窗體上點(diǎn)擊右鍵,選擇“查看代碼(view code)”,在代碼的第一行添加下面二行:




imports system.drawing
imports system.drawing.imaging
public class chart
inherits system.web.ui.page

#region " web 窗體設(shè)計(jì)器生成的代碼 "

'該調(diào)用是 web 窗體設(shè)計(jì)器所必需的。
<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: 此方法調(diào)用是 web 窗體設(shè)計(jì)器所必需的
'不要使用代碼編輯器修改它。
initializecomponent()
end sub

#end region

'創(chuàng)建頁面事件
private sub page_load(byval sender as system.object, _
byval e as system.eventargs) handles mybase.load

'聲明整型變量i,
dim i as integer

'創(chuàng)建一個位圖對象,用來放置柱形圖,我們可以把它看作是一塊畫布。
'這里寬、高分別是400和200,當(dāng)然,你也可以根據(jù)需要把它們做為參數(shù)來進(jìn)行傳遞。
dim objbitmap as new bitmap(400, 200)

'聲明一個圖形對象,在上面創(chuàng)建的位圖上畫圖。
dim objgraphics as graphics

'從指定的objbitmap對象創(chuàng)建新圖形對象objgraphics。
objgraphics = graphics.fromimage(objbitmap)

'清除整個繪圖面并以指定白色為背景色進(jìn)行填充。
objgraphics.clear(color.white)

'創(chuàng)建一個數(shù)據(jù)源,這里我們?yōu)榱朔奖闫溟g,采用數(shù)組做為柱形圖和餅圖的數(shù)據(jù)源。
dim arrvalues(5) as integer
arrvalues(0) = 100
arrvalues(1) = 135
arrvalues(2) = 115
arrvalues(3) = 125
arrvalues(4) = 75
arrvalues(5) = 120

'定義數(shù)組對象,用來描述圖例。
dim arrvaluenames(5) as string
arrvaluenames(0) = "一月"
arrvaluenames(1) = "二月"
arrvaluenames(2) = "三月"
arrvaluenames(3) = "四月"
arrvaluenames(4) = "五月"
arrvaluenames(5) = "六月"

'在畫布(objbitmap對象)的坐標(biāo)5,5處,用指定的brush(畫筆)對象和font(字體)對象繪制統(tǒng)計(jì)圖標(biāo)題。
objgraphics.drawstring(" x 公司上半年銷售情況", _
new font("宋體", 16), brushes.black, new pointf(5, 5))

'創(chuàng)建圖例文字。
dim symbolleg as pointf = new pointf(335, 20)
dim descleg as pointf = new pointf(360, 16)

'畫出圖例。利用objgraphics圖形對象的三個方法畫出圖例:
'fillrectangle()方法畫出填充矩形,drawrectangle()方法畫出矩形的邊框,
'drawstring()方法畫出說明文字。這三個圖形對象的方法在 .net 框架類庫類庫中均已重載,
'可以很方便根據(jù)不同的參數(shù)來畫出圖形。
for i = 0 to arrvaluenames.length - 1

'畫出填充矩形。
objgraphics.fillrectangle(new solidbrush(getcolor(i)), symbolleg.x, symbolleg.y, 20, 10)

'畫出矩形邊框。
objgraphics.drawrectangle(pens.black, symbolleg.x, symbolleg.y, 20, 10)

'畫出圖例說明文字。
objgraphics.drawstring(arrvaluenames(i).tostring, new font("宋體", 10), brushes.black, descleg)

'移動坐標(biāo)位置,只移動y方向的值即可。
symbolleg.y += 15
descleg.y += 15

next i

'遍歷數(shù)據(jù)源的每一項(xiàng)數(shù)據(jù),并根據(jù)數(shù)據(jù)的大小畫出矩形圖(即柱形圖的柱)。

for i = 0 to arrvalues.length - 1

'畫出填充矩形。
objgraphics.fillrectangle(new solidbrush(getcolor(i)), _
(i * 35) + 15, 200 - arrvalues(i), 20, arrvalues(i) + 5)
'畫出矩形邊框線。
objgraphics.drawrectangle(pens.black, (i * 35) + 15, 200 - arrvalues(i), 20, arrvalues(i) + 5)

next

'下面畫餅圖。先定義兩個變量,代表當(dāng)前角度和總角度,以便于畫圖時(shí)將角度進(jìn)行按比例換算。
dim sglcurrentangle as single = 0
dim sgltotalangle as single = 0

'定義一個變量,代表總的銷售額。
dim sgltotalvalues as single = 0

'計(jì)算總銷售額。
for i = 0 to arrvalues.length - 1
sgltotalvalues += arrvalues(i)
next

i = 0

'遍歷數(shù)據(jù)源的每一項(xiàng)數(shù)據(jù),并根據(jù)數(shù)據(jù)的大小畫出餅圖。
'圖形對象的fillpie()方法和drawpie()在.net 框架類庫中已重載。
for i = 0 to arrvalues.length - 1

'計(jì)算當(dāng)前角度值:當(dāng)月銷售額 / 總銷售額 * 360,得到餅圖中當(dāng)月所占的角度大小。
sglcurrentangle = arrvalues(i) / sgltotalvalues * 360

'畫出填充圓弧。
objgraphics.fillpie(new solidbrush(getcolor(i)), _
220, 95, 100, 100, sgltotalangle, sglcurrentangle)

'畫出圓弧線。
objgraphics.drawpie(pens.black, 220, 95, 100, 100, sgltotalangle, sglcurrentangle)

'把當(dāng)前圓弧角度加到總角度上。
sgltotalangle += sglcurrentangle

next i

'將objgraphics對象以指定的圖形格式(這里是gif)保存到指定的stream對象,并輸出到客戶端。
objbitmap.save(response.outputstream, imageformat.gif)

end sub

'下面這段函數(shù)用來根據(jù)不同的月份返回不同的顏色值。
private function getcolor(byval itemindex as integer) as color

dim objcolor as color

select case itemindex
case 0
objcolor = color.blue
case 1
objcolor = color.red
case 2
objcolor = color.yellow
case 3
objcolor = color.purple
case 4
objcolor = color.orange
case 5
objcolor = color.brown
case 6
objcolor = color.gray
case 7
objcolor = color.maroon
case 8
objcolor = color.maroon
case else
objcolor = color.blue
end select
return objcolor
end function

end class




好了,我們的代碼已經(jīng)寫完,點(diǎn)擊“全部保存”按鈕,然后按“f5”執(zhí)行,看看最好的結(jié)果。如果沒有錯誤的話,您將會看到如下的結(jié)果:



值得說明的是,上面只是簡單地示例了如何利用.net 框架類庫中的圖形類創(chuàng)建簡單的圖形,但.net 框架類庫中還提供了更高級的二維和矢量圖形功能,利用這些高級功能,我們可以創(chuàng)建出二維或矢量的圖形,那時(shí),我們的圖形看起來會更加形象。

本文所有代碼在簡體中文windows 2000 + .net framework 1.0(英文正式版)+ .net framework sp1和windows xp + .net framework 1.0(中文版)下調(diào)試通過。

c#代碼

using system;
using system.collections;
using system.componentmodel;
using system.data;
using system.drawing;
using system.web;
using system.web.sessionstate;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.htmlcontrols;
using system.drawing.imaging;

namespace emeng.exam
{
/// <summary>
/// chart 的摘要說明。
/// </summary>
public class chart : system.web.ui.page
{
private void page_load(object sender, system.eventargs e)
{
// 在此處放置用戶代碼以初始化頁面
bitmap objbitmap = new bitmap(400, 200);
graphics objgraphics;
objgraphics = graphics.fromimage(objbitmap);
objgraphics.clear(color.white);
int[] arrvalues = {100,135,115,125,75,120};
string[] arrvaluenames = new string[]{"一月","二月","三月","四月","五月","六月"};
objgraphics.drawstring(" x 公司上半年銷售情況",
new font("宋體", 16), brushes.black, new pointf(5, 5));
pointf symbolleg = new pointf(335, 20);
pointf descleg = new pointf(360, 16);
for (int i = 0; i < arrvaluenames.length; i++)
{
objgraphics.fillrectangle(new solidbrush(getcolor(i)), symbolleg.x, symbolleg.y, 20, 10);
objgraphics.drawrectangle(pens.black, symbolleg.x, symbolleg.y, 20, 10);
objgraphics.drawstring(arrvaluenames[i].tostring(), new font("宋體", 10), brushes.black, descleg);
symbolleg.y += 15;
descleg.y += 15;
}
for (int i = 0; i < arrvalues.length; i++)
{
objgraphics.fillrectangle(new solidbrush(getcolor(i)), (i * 35) + 15, 200 - arrvalues[i], 20,
arrvalues[i] + 5);
objgraphics.drawrectangle(pens.black, (i * 35) + 15, 200 - arrvalues[i], 20, arrvalues[i] + 5);
}
float sglcurrentangle = 0;
float sgltotalangle = 0;
float sgltotalvalues = 0;
for (int i = 0; i <= arrvalues.length - 1; i++)
{
sgltotalvalues += arrvalues[i];
}
for (int i = 0; i < arrvalues.length; i++)
{
sglcurrentangle = arrvalues[i] / sgltotalvalues * 360;
objgraphics.fillpie(new solidbrush(getcolor(i)), 220, 95, 100, 100, sgltotalangle, sglcurrentangle);
objgraphics.drawpie(pens.black, 220, 95, 100, 100, sgltotalangle, sglcurrentangle);
sgltotalangle += sglcurrentangle;
}
objbitmap.save(response.outputstream, imageformat.gif);

}
private color getcolor(int itemindex)
{
color objcolor;
if (itemindex == 0)
{
objcolor = color.blue;
}
else if (itemindex == 1)
{
objcolor = color.red;
}
else if (itemindex == 2)
{
objcolor = color.yellow;
}
else if (itemindex == 3)
{
objcolor = color.purple;
}
else if (itemindex == 4)
{
objcolor = color.orange;
}
else if (itemindex == 5)
{
objcolor = color.brown;
}
else if (itemindex == 6)
{
objcolor = color.gray;
}
else if (itemindex == 7)
{
objcolor = color.maroon;
}
else if (itemindex == 8)
{
objcolor = color.maroon;
}
else
{
objcolor = color.blue;
}
return objcolor;
}


#region web 窗體設(shè)計(jì)器生成的代碼
override protected void oninit(eventargs e)
{
//
// codegen: 該調(diào)用是 asp.net web 窗體設(shè)計(jì)器所必需的。
//
initializecomponent();
base.oninit(e);
}

/// <summary>
/// 設(shè)計(jì)器支持所需的方法 - 不要使用代碼編輯器修改
/// 此方法的內(nèi)容。
/// </summary>
private void initializecomponent()
{
this.load += new system.eventhandler(this.page_load);
}
#endregion
}
}



本文評論(comments):為了保護(hù)您的電子郵件不被騷擾,地址中的個別符號轉(zhuǎn)換成了全角字符!
評論人:enjsky 電子郵件:gzj114@163.com 評論日期:2004年08月31日 04:07:45
在餅狀圖上如何標(biāo)示數(shù)據(jù) 的我已經(jīng)解決了,發(fā)給大家看一下,學(xué)習(xí)....

c#代碼如下:
namespace per_mang
{
using system;
using system.collections;
using system.componentmodel;
using system.data;
using system.drawing;
using system.web;
using system.web.sessionstate;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.htmlcontrols;
using system.drawing.imaging;


///
/// chart 的摘要說明。
///
public class chart : system.web.ui.page
{
private void page_load(object sender, system.eventargs e)
{
// 在此處放置用戶代碼以初始化頁面
bitmap objbitmap = new bitmap(700, 500);
graphics objgraphics;
objgraphics = graphics.fromimage(objbitmap);
objgraphics.clear(color.white);
stringformat drawformat = new system.drawing.stringformat(stringformatflags.directionvertical);
stringformat drawformat1 = new system.drawing.stringformat(stringformatflags.displayformatcontrol);
int[] arrvalues = {300,135,115,125,75,120};
string[] arrvaluenames = new string[]{"一月","二月","三月","四月","五月","六月"};
objgraphics.drawstring(" x 公司上半年銷售情況",
new font("宋體", 16), brushes.black,200,0,drawformat1);
pointf symbolleg = new pointf(500, 20);
pointf descleg = new pointf(560, 16);
//顯示什么顏色代表什么的
for (int i = 0; i < arrvaluenames.length; i++)
{
objgraphics.fillrectangle(new solidbrush(getcolor(i)), symbolleg.x, symbolleg.y, 20, 10);
objgraphics.drawrectangle(pens.black, symbolleg.x, symbolleg.y, 20, 10);
objgraphics.drawstring(arrvaluenames[i].tostring(), new font("宋體", 10), brushes.black, descleg);
symbolleg.y += 15;
descleg.y += 15;
}
for (int i = 0; i < arrvalues.length; i++)
{
objgraphics.fillrectangle(new solidbrush(getcolor(i)), (i * 35) + 15, 400 - arrvalues[i], 20,
arrvalues[i] + 5);
objgraphics.drawrectangle(pens.black, (i * 35) + 15, 400 - arrvalues[i], 20, arrvalues[i] + 5);
objgraphics.drawstring(arrvaluenames[i].tostring() + "【"+ arrvalues[i].tostring()+"】", new font("宋體", 10), brushes.black,(i * 35) + 15,310 - arrvalues[i], drawformat);

}
float sglcurrentangle = 0;
float sgltotalangle = 0;
float sgltotalvalues = 0;
for (int i = 0; i <= arrvalues.length - 1; i++)
{
sgltotalvalues += arrvalues[i];
}
for (int i = 0; i < arrvalues.length; i++)
{
sglcurrentangle = arrvalues[i] / sgltotalvalues * 360;
objgraphics.fillpie(new solidbrush(getcolor(i)), 420, 300, 100, 100, sgltotalangle, sglcurrentangle);
objgraphics.drawpie(pens.black, 420, 300, 100, 100, sgltotalangle, sglcurrentangle);
sgltotalangle += sglcurrentangle;
}
objbitmap.save(response.outputstream, imageformat.gif);

}
private color getcolor(int itemindex)
{
color objcolor;
if (itemindex == 0)
{
objcolor = color.blue;
}
else if (itemindex == 1)
{
objcolor = color.red;
}
else if (itemindex == 2)
{
objcolor = color.yellow;
}
else if (itemindex == 3)
{
objcolor = color.purple;
}
else if (itemindex == 4)
{
objcolor = color.orange;
}
else if (itemindex == 5)
{
objcolor = color.brown;
}
else if (itemindex == 6)
{
objcolor = color.gray;
}
else if (itemindex == 7)
{
objcolor = color.maroon;
}
else if (itemindex == 8)
{
objcolor = color.maroon;
}
else
{
objcolor = color.blue;
}
return objcolor;
}


#region web 窗體設(shè)計(jì)器生成的代碼
override protected void oninit(eventargs e)
{
//
// codegen: 該調(diào)用是 asp.net web 窗體設(shè)計(jì)器所必需的。
//
initializecomponent();
base.oninit(e);
}

///
/// 設(shè)計(jì)器支持所需的方法 - 不要使用代碼編輯器修改
/// 此方法的內(nèi)容。
///
private void initializecomponent()
{
this.load += new system.eventhandler(this.page_load);
}
#endregion
}
}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 维西| 彭州市| 稷山县| 琼海市| 陇川县| 华蓥市| 福清市| 祁门县| 芷江| 邓州市| 若尔盖县| 岳西县| 泸水县| 疏附县| 梨树县| 封丘县| 长葛市| 东乡县| 汉川市| 渑池县| 丹东市| 宿州市| 沧州市| 综艺| 拜城县| 麻城市| 晋宁县| 娱乐| 新和县| 衡南县| 朔州市| 宜州市| 扎兰屯市| 多伦县| 大渡口区| 建宁县| 怀宁县| 普洱| 桓台县| 华安县| 安国市|