using System; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Collections; using System.Collections.Specialized; namespace Controls.Custom { /// <summary> /// ChartVolumeReport 的摘要說明。 /// </summary> [DefaultProperty("Text"), ToolboxData("<{0}:ChartVolumeReport runat=server></{0}:ChartVolumeReport>")] public class ChartVolumeReport:Control { int bx = 1000; int by = 4700;//坐標(biāo)的最低處 int yh = 80;//垂直陰影高度 int xw = 80;//水平陰影寬度 int count=0; double step; double max; double min; int deci = 2; double ystep; string str_Volume=string.Empty; string str_Group3=string.Empty; string str_TempA=string.Empty; string str_info=string.Empty; string str_dinfo=string.Empty; string temp=string.Empty; private string data; private string dataInfor; private string colorArr; private string[] Color; string[] tmpdata;//傳的數(shù)值 string[] tmpdatainfor;//傳的對(duì)應(yīng)內(nèi)容 #region 屬性 [Bindable(true),Category("Data"),DefaultValue("")] public string Data { get { return data; } set { data=value; } } [Bindable(true),Category("Data"),DefaultValue("")] public string DataInfor { get { return DataInfor ; } set { dataInfor=value; } } [Bindable(true),Category("Data"),DefaultValue("")] public string ColorArr { get { return colorArr; } set { colorArr=value; } } #endregion public ChartVolumeReport() { str_Volume+="<v:group ID=\"group2\" style=\"WIDTH:480px;POSITION:relative;HEIGHT:270px\" coordsize=\"7200,4050\">"; str_Volume+="<v:rect style=\"WIDTH:9600px;HEIGHT:5400px\" fillcolor=\"white\" strokecolor=\"black\" coordsize=\"21600,21600\">"; str_Volume+="<v:shadow on=\"t\" type=\"single\" color=\"silver\" offset=\"4pt,3pt\"></v:shadow>"; str_Volume+="</v:rect>"; str_Group3+="<v:group ID=\"group3\" style=\"DISPLAY:block;WIDTH:9600px;POSITION:relative;HEIGHT:5400px\" coordsize=\"9600,5400\">"; str_Group3+="<v:line from=\"1000,500\" to=\"1000,4900\" style=\"Z-INDEX:1;POSITION:absolute\" strokeweight=\"1pt\">"; str_Group3+="<v:stroke StartArrow=\"classic\" />"; str_Group3+="</v:line>"; str_Group3+="<v:polyLine filled=\"t\" fillcolor=\"#adaead\" strokecolor=\"#adaead\" strokeweight=\"1pt\" points=\"1000,700,1100,620,1100,4620,1000,4700,1000,700\"></v:polyLine>"; str_Group3+="<v:polyLine filled=\"t\" fillcolor=\"#d6d7d6\" strokecolor=\"#d6d7d6\" strokeweight=\"1pt\" points=\"1000,4700,1100,4620,9100,4620,9000,4700,1000,4700\"></v:polyLine>"; str_Group3+="<v:polyLine filled=\"t\" fillcolor=\"#efefef\" strokecolor=\"#efefef\" strokeweight=\"1pt\" points=\"1000,4700,9000,4700,9000,4900,1000,4900,1000,4700\"></v:polyLine>"; str_Group3+="<v:polyLine filled=\"t\" fillcolor=\"#fc0\" strokecolor=\"#fc0\" strokeweight=\"1pt\" points=\"9000,4700,9100,4620,9100,4820,9000,4900,9000,4700\"></v:polyLine>"; str_info="<div id=\"info\">"; str_dinfo="<div id=\"dinfo\">"; } protected override void Render(HtmlTextWriter output) { Color=colorArr.Split(new char[]{','}); tmpdata=data.Split(new char[]{','});//傳的數(shù)值 tmpdatainfor=dataInfor.Split(new char[]{','});//傳的對(duì)應(yīng)內(nèi)容 count=tmpdata.Length; step= 8000/count; max=Convert.ToDouble(tmpdata[0]); min=Convert.ToDouble(tmpdata[0]); for(int i=0;i<tmpdata.Length;i++) { if(Convert.ToDouble(tmpdata[i])/1>max) max=Convert.ToDouble(tmpdata[i]); if(Convert.ToDouble(tmpdata[i])/1<min) min=Convert.ToDouble(tmpdata[i]); } ystep=4000/max; drawColumn(); this.Page.Response.Write(str_Volume); } private void drawColumn() { //畫豎直背景 for(int i=0;i<tmpdata.Length;i++) { if(i%2 != 0) { temp="<v:PolyLine filled=t fillcolor='#F7F7F7' strokecolor='#F7F7F7' strokeweight=1pt points='"+(bx+i*step+xw)+","+(by-yh-10)+" "+(bx+i*step+xw)+",500 "+(bx+(i/1+1)*step+xw)+",500 "+(bx+(i/1+1)*step+xw)+","+(by-yh-10)+" "+(bx+i*step+xw)+","+(by-yh-10)+"'/>"; str_TempA=temp+"<v:PolyLine filled=t fillcolor='#dedfde' strokecolor='#dedfde' strokeweight=1pt points='"+(bx+i*step)+","+by+" "+(bx+(i/1+1)*step)+","+by+" "+(bx+(i/1+1)*step)+","+(by+200)+" "+(bx+i*step)+","+(by+200)+" "+(bx+i*step)+","+by+"'/>"+str_TempA; } } //str_Volume+=str_TempA; //畫水平橫線和Y側(cè)橫線 string lineColor=""; for(int i=1;i<11;i++) { double ynum; if (deci >0 ) { ynum = Math.Round(Math.Pow(10,deci)*i*max*0.1)*Math.Pow(10,deci+1)/(Math.Pow(10,deci+deci+1)); } else { ynum = Math.Round(i*max*0.1); } if(i%3==0) lineColor="#B5E3B5"; else lineColor="#E7E3E7"; temp="<v:Line title="+ynum+" strokecolor='"+lineColor+"' strokeweight=1pt from='"+(bx+xw)+","+(by-i*400-yh)+"' to='"+9100+","+(by-i*400-yh)+"'/>"; str_TempA=str_TempA+temp;; temp="<v:Line title="+ynum+" strokecolor='#E7E3E7' strokeweight=1pt from='"+bx+","+(by-i*400)+"' to='"+(bx+xw)+","+(by-i*400-yh)+"'/>"; str_TempA=str_TempA+temp; temp="<v:Line title="+ynum+" strokecolor='#000000' strokeweight=1pt from='"+bx+","+(by-i*400)+"' to='"+(bx-100)+","+(by-i*400)+"'/>"; str_TempA=str_TempA+temp; double top = 0 + i*12.5; if (deci>0) { ynum = Math.Round(Math.Pow(10,deci)*(11-i)*max*0.1)*Math.Pow(10,deci+1)/(Math.Pow(10,deci+deci+1)); } else { ynum = Math.Round((11-i)*max*0.1); } string nInfo="<Div align='right' style='font-size:9pt;position:relative;top:"+top+";left:-555'>"+ynum+"</Div>"; str_dinfo+= nInfo; } //畫X側(cè)橫線畫柱狀圖 string infostr="<TABLE cellspacing='0' cellpadding='0' border=0 style='POSITION:absolute;LEFT:6px;TOP:299px;width:535px;'><TR>"; for(int i=0;i<tmpdata.Length;i++) { infostr+="<TD width='"+100/tmpdata.Length+"%' align='center'><FONT SIZE=2>"+tmpdatainfor[i].ToString()+"</FONT></TD>"; if(Convert.ToDouble(tmpdata[i])/1 != 0) createColumn(i); } infostr+="</TR></TABLE>"; str_info=infostr; //完成,綜合語句 str_Volume+=str_TempA; str_Volume+=str_Group3; str_Volume+=str_info; str_Volume+="</div>"; str_Volume+=str_dinfo; str_Volume+="</div>"; str_Volume+="</v:group></v:group>"; } private void createColumn(int index) { double sx=bx+index*step/1+step/4; double h=Convert.ToDouble(tmpdata[index])*ystep; double sy=4700-h; string showMsg=tmpdatainfor[index]+":"+tmpdata[index]; str_Group3+="<v:polyLine onclick='JavaScript:alert(\""+showMsg+"\")' title='"+showMsg+"' style='z-index:9' filled=t fillcolor='"+Color[index]+"' strokecolor='"+Color[index]+"' strokeweight=1pt points='"+sx+","+by+" "+sx+","+sy+" "+(sx+step/2)+","+sy+" "+(sx+step/2)+","+by+" "+sx+","+by+"'>" + "<v:Extrusion on='t' foredepth='0' backdepth='15pt' color='"+Color[index]+"' rotationangle='0,0'></v:Extrusion></v:polyLine>"; } } } //下面是使用的例子 private void Page_Load(object sender, System.EventArgs e) { Chat1.Data="12.5,25,19.5,17.5,12.5,16,9,21,3,7,8,6.2,9"; Chat1.DataInfor="楊浦區(qū),閘北區(qū),普陀區(qū),虹口區(qū),寶山區(qū),嘉定區(qū),黃浦區(qū),閔行區(qū),浦東區(qū),靜安,徐匯區(qū),其他區(qū),其他區(qū)"; Chat1.ColorArr="#ff2222,#d0b83a,#ffdf00,green,#ff9e00,#799AE1,#99c741,#d0b83a,#319a00,#c27f34,#2222ff,#ff2222,#99c741"; } //保證程序運(yùn)行正常請(qǐng)按下面做
下面是使用的時(shí)候,html代碼中需要加入的,注意< html >標(biāo)記處,和< Style >標(biāo)記處。
<HTML xmlns:v="urn:schemas-microsoft-com:vml"> <HEAD> <title>WebForm2</title> <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"> <meta name="CODE_LANGUAGE" Content="C#"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> <STYLE> v\:* { BEHAVIOR: url(#default#VML) } </STYLE> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <cc1:ChartVolumeReport id="Chat1" runat="server"></cc1:ChartVolumeReport> </form> </body> </HTML>