【TeeChart Pro ActiveX教程】(九):TeeChart、WebChart和ASP(下)
免費腳本化的ASP應用程序
在WebForm中使用WebChart的另一種方法是在標準的asp(aspx)頁面中使用TeeChart作為腳本化的“non-visible/不可見”控件。TeeChart for .NET附帶了一個實例來演示這種技術。您可以在TeeChart的ASP.NET演示項目中找到它,在“Interacting with Charts\Chart as Image/與圖表交互圖表作為圖像”演示文件夾下,標題為“Series Types as Image/系列類型為圖像”的示例
TeeChart可以通過內部Chart類在ASP中自由編寫腳本,雖然為了利用TeeChart事件,我們建議使用TChart Windows窗體組件或WebChart控件
將圖表添加到腳本中
假設使用TChart,您需要采取的初始步驟來設置TeeChart項目:
- 創(chuàng)建新的ASP.NET Forms項目。這將創(chuàng)建一個WebForm頁面,您將其用作客戶端頁面。(參見示例SeriesTypes.aspx頁面)
- 添加新的WebForm頁面。此頁面將不可見,將用于處理圖表代碼服務器端。(請參閱示例ShowSeries.aspx頁面)- 該頁面應包含對System.Windows.Forms.dll的引用。這是因為TChart組件是基于Windows.Forms的組件。
- 按照此處和ASPStreams示例中突出顯示的代碼步驟,作為如何設置項目的指南。
流程
客戶端瀏覽器頁面(SeriesTypes.aspx)包含一個IMG鏈接是aspx服務器腳本(ShowSeries.aspx)的圖像??蛻舳隧撁嫔系奶峤话粹o調用服務器腳本,其中包含參數(shù)化serverChart處理所需的變量。該按鈕將變量作為參數(shù)的一部分發(fā)送,以設置客戶頁面圖表圖像的imageURL,因此返回基于處理參數(shù)的動態(tài)圖表。
使用TeeChart進行編碼
要使用TeeChart服務器代碼,請在腳本頁面上添加使用TeeChart,例如:
using Steema.TeeChart;
然后為TChart聲明一個變量,并在Page_Load事件的開頭創(chuàng)建它,例如:
private TChart tChart; private void Page_Load(object sender, System.EventArgs e) { tChart=new TChart(); /* ...add Series and data, etc ... */ }
圖表檢索的關鍵代碼元素
關鍵代碼組件是:
1??蛻舳?ldquo;Get”指令。這可以通過提交按鈕或其他方式(例如Combobox)啟動,并根據(jù)客戶端參數(shù)從服務器“Get”圖表。對圖表的請求可以作為傳統(tǒng)的Get url行發(fā)送,其中參數(shù)作為一個URL行傳遞,或者可以通過ASP.NET的“Passing Server Control Values Between Pages/在頁面之間傳遞服務器控制值”來完成(請參閱Microsoft關于此主題的幫助主題更多細節(jié))。用于調用服務器腳本的編碼將在WebForms Code后面頁面中進行。
示例:在此示例中,變量取自不同的WrbForm頁面元素,并作為參數(shù)添加到Image'Get'URl行。
private void sendInfo() { seriesType=DropDownList1.Items[DropDownList1.SelectedIndex].ToString(); viewType=CheckBox1.Checked.ToString(); Image1.ImageUrl="http://"+webServer /*use webserver variable for server*/ +"/TeeChartForNET/ASPStream/ProcessChart.aspx?seriestype=" +seriesType+"&view="+viewType; }
2.服務器腳本從客戶端接收GET請求并運行其Page_Load事件。如果可以創(chuàng)建圖表并且可以使用所接收的參數(shù)來定義圖表的填充方式。然后將圖表呈現(xiàn)為圖像,并作為流重新提交給客戶端,
private void Page_Load(object sender, System.EventArgs e) { tChart=new TChart(); tChart.AfterDraw += new Steema.TeeChart.TChart.PaintChartEventHandler(this.tChart_AfterDraw); /* ...add Series and data, etc ... */ //Process Get parameters received from client if (Request.QueryString["view"]=="False") tChart.Aspect.View3D=false; else tChart.Aspect.View3D=true; MemoryStream tempStream = new MemoryStream(); tChart.Export.Image.PNG.Save(tempStream); Response.ContentType="Image/PNG"; Response.OutputStream.Write(tempStream.ToArray(),0,(int)tempStream.Length); tempStream.Close(); }
添加事件
可以通過在創(chuàng)建圖表后添加事件,為Free-scripted TeeChart ASP應用程序添加圖表創(chuàng)建事件,例:
private void Page_Load(object sender, System.EventArgs e) { tChart=new TChart(); tChart.AfterDraw += new Steema.TeeChart.TChart.PaintChartEventHandler(this.tChart_AfterDraw); /* ...add Series and data, etc ... */ MemoryStream tempStream = new MemoryStream(); tChart.Export.Image.PNG.Save(tempStream); Response.ContentType="Image/PNG"; Response.OutputStream.Write(tempStream.ToArray(),0,(int)tempStream.Length); tempStream.Close(); } private void tChart_AfterDraw(object sender, Steema.TeeChart.Drawing.Graphics3D g) { string tmpStr="Copyright My Organisation "+DateTime.Now.ToString(); g.TextOut(g.Chart.Width-(int)g.TextWidth(tmpStr)-5,g.Chart.Height-(int)g.TextHeight("H")-3,tmpStr); }
AfterDraw事件代碼將在圖表創(chuàng)建時執(zhí)行,在這種情況下,當圖表呈現(xiàn)為圖像時,相關消息將包含在圖表畫布中。如果您希望在客戶端頁面圖表上使用基于用戶鼠標點擊的交互式事件,我們建議您在WebForm上使用WebChart組件。
安全問題
通過安裝程序安裝的默認TeeChart for .NET會創(chuàng)建足以訪問TeeChart附帶的ASP.NET示例的文件夾和IIS虛擬文件夾。WebForm應用程序假定在IIS中激活會話支持以移動臨時圖表信息??梢栽赩isual Studio.NET中修改示例項目,以使用“文件”作為臨時存儲圖表的媒介。在Windows 2000中令人滿意的測試中。在Windows 2003中,默認安裝的其他安全限制限制了使用默認“_chart_temp”文件夾的可能性(臨時文件夾的名稱和位置是可配置的)。在Win2003服務器中,系統(tǒng)管理員必須修改安全權限,以允許相關ASP.NET應用程序將臨時文件保存到磁盤。
WebChart工具
WebChart工具可用于從“編輯器工具”選項板添加到WebChart。許多非WebChart特定工具可以與WebCharts一起使用,除了那些響應鼠標移動的工具(除了下面介紹的WebChart工具之外)。下面描述的所有工具技術都包含在TeeChart WebChart演示的實例中。
HotspotTool
以最簡單的形式,此工具激活數(shù)據(jù)點鼠標懸停標簽,當鼠標在點上傳遞時顯示。Hotspot工具也適用于Winform Charts,但WebChart的操作性質因此處所述而異。WebChart Hotspot Tool生成與每個數(shù)據(jù)點關聯(lián)的mapregion??梢詮囊韵逻x項中選擇地圖操作:
- Mark - 根據(jù)所選樣式選項顯示點標記。
- URL - 單擊數(shù)據(jù)點時連接到URL
- Script - 單擊數(shù)據(jù)點時運行自定義Javascript
Mark
使用“Style”屬性定義“標記樣式”。 例如。(通過代碼)
Steema.TeeChart.Tools.SeriesHotspot hotspotTool = ((Steema.TeeChart.Tools.SeriesHotspot)WebChart1.Chart.Tools[0]); hotspotTool.MapAction = Steema.TeeChart.Styles.MapAction.Mark; hotspotTool.Style = Steema.TeeChart.Styles.MarksStyles.LabelPercentTotal;
URL
使用GetHTMLMap事件設置從數(shù)據(jù)點調用的URL??梢酝ㄟ^編輯器設置URL選項,但您必須對事件進行編碼以設置正確的URL。 例如。
//init code.... Steema.TeeChart.Tools.SeriesHotspot hotspotTool = ((Steema.TeeChart.Tools.SeriesHotspot)WebChart1.Chart.Tools[0]); hotspotTool.GetHTMLMap += new Steema.TeeChart.Tools.SeriesHotspotEventHandler(hotspotTool_GetHTMLMap); //event code: private void hotspotTool_GetHTMLMap(Steema.TeeChart.Tools.SeriesHotspot sender, Steema.TeeChart.Tools.SeriesHotspotEventArgs e) { if (CheckBox1.Checked) //open new window? e.PointPolygon.Attributes="target='_blank'"; else e.PointPolygon.Attributes="target='_self'"; tab if (e.Series==WebChart1.Chart.Series[0]) e.PointPolygon.HREF="http://" + TextBox1.Text; //set URL according to textbox text + TextBox1.Text; //set URL according to textbox text if (e.Series==WebChart1.Chart.Series[1]) e.PointPolygon.HREF="http://" + TextBox2.Text; if (e.Series==WebChart1.Chart.Series[2]) e.PointPolygon.HREF="http://" + TextBox3.Text; + TextBox3.Text; if (e.Series==WebChart1.Chart.Series[3]) e.PointPolygon.HREF="http://" + TextBox4.Text; }
Script
腳本選項可用于處理您可能希望通過Javascript添加到圖表中的任何自定義內容或增值。選擇腳本作為選項時,TeeChart會添加使用幫助程序腳本的選項,當前可用:“注釋”(請參閱??Steema.TeeChart.Tools.HotspotHelperScripts)。您可以選擇不使用Helperscript并定義自己的輸出。 注釋示例:
protected void Page_Load(object sender, System.EventArgs e) { //initialization Chart ch1 = WebChart1.Chart; Steema.TeeChart.Themes.ColorPalettes.ApplyPalette(ch1, 9); Steema.TeeChart.Tools.SeriesHotspot hotspot1 = new Steema.TeeChart.Tools.SeriesHotspot(); ch1.Legend.Visible = false; ch1.Tools.Add(hotspot1); hotspot1.MapAction = Steema.TeeChart.Styles.MapAction.Script; hotspot1.GetHTMLMap += new Steema.TeeChart.Tools.SeriesHotspotEventHandler(hotspot1_GetHTMLMap); //....etc... more init code } private void hotspot1_GetHTMLMap(Steema.TeeChart.Tools.SeriesHotspot sender, Steema.TeeChart.Tools.SeriesHotspotEventArgs e) { //This example calls a Bar Series but e.Series and e.PointPolygon.ValueIndex could be sent //as arguments for a drilldown query. //The prepared HelperScriptAnnotation text accepts your text as a variable for the Annotation //In the following case it calls an aspx script to generate and return a Chart as an image e.PointPolygon.Attributes=String.Format(Texts.HelperScriptAnnotation, "<IMG SRC=ShowSeries.aspx?seriestype=Bar&view=False&width=100&height=80>"); //The annotation could, alternatively, present text in the mouseover hint, eg.: //e.PointPolygon.Attributes=String.Format(Steema.TeeChart.Texts.HelperScriptAnnotation,"hello world."); }
上例中使用的HelperScriptAnnotation是: HelperScriptAnnotation =“onmouseover = \”ShowAnnotation('{0}'); \“onmouseout = \”ShowAnnotation(''); \“”; 如果您要添加自己的輸出,則可以將調用替換為您自己的代碼。 例如。
string myProcess = ="onmouseover=\"ShowAssociatedDataTable('{0}');\" onmouseout=\"ShowAssociatedDataTable('');\""; e.PointPolygon.Attributes=String.Format(myProcess,e.PointPolygon.ValueIndex.ToString());
然后,您將使用ShowAssociatedDataTable方法來執(zhí)行調用以顯示關聯(lián)的數(shù)據(jù)表。
ScrollTool
scrollTool將滾動條添加到WebChart的底部。您可以設置圖表的可見部分大小和起始位置。盡管可以取消激活功能,但圖表也可以拖動。ScrollTool可以與Hotspot Tool結合使用。 使用編輯器添加ScrollTool會自動將圖表設置為2D并移動下軸以允許滾動條的空間。滾動條在設計時不可見。 將ViewSegmentSize和StartPosition與SegmentViewUnits結合使用以設置可滾動大小。 例如。
Steema.TeeChart.Tools.ScrollTool scrollTool = ((Steema.TeeChart.Tools.ScrollTool)WebChart1.Chart.Tools[0]); scrollTool.StartPosition = 30; scrollTool.SegmentViewUnits = Steema.TeeChart.Tools.ScrollToolViewUnit.percent; scrollTool.ViewSegmentSize = 20;
ZoomTool
ZoomTool允許選擇要處理的圖表的子區(qū)域以進行縮放??梢酝ㄟ^圖表區(qū)域上的mousedrag選擇該區(qū)域,將縮放坐標返回到服務器以停止縮放區(qū)域。該區(qū)域可以通過相反方向的阻力來解除。 要使用ZoomTool,您應該將以下方法添加到頁面代碼中。 使用會話:
private void CheckZoom(WebChart wChart) { ArrayList zoomedState=(ArrayList)Session[wChart.ID+"Zoomed"]; zoomedState=((Steema.TeeChart.Tools.ZoomTool)wChart.Chart.Tools[0]).SetCurrentZoom(Request, zoomedState); if (zoomedState==null) Session.Remove(wChart.ID+"Zoomed"); else Session.Add(wChart.ID+"Zoomed",zoomedState); }
或Page.Cache:
private void CheckZoom(WebChart wChart) { ArrayList zoomedState = (ArrayList)Page.Cache[wChart.ID + "Zoomed"]; zoomedState = ((Steema.TeeChart.Tools.ZoomTool)wChart.Chart.Tools[0]).SetCurrentZoom(Request, zoomedState); if (zoomedState == null) Page.Cache.Remove(wChart.ID + "Zoomed"); else Page.Cache.Add(wChart.ID + "Zoomed", zoomedState); }
在Page_Load方法的末尾調用方法,傳遞要縮放的圖表的名稱。 例如。
CheckZoom(WebChart1);
在沒有任何鼠標x或y位移的圖表上單擊/拖動會導致單擊發(fā)送回服務器,而不是縮放。如果要求使用window onload事件,請參閱Window onload事件部分。
當您的WebChart添加了縮放或滾動工具時,它需要使用Window.onload事件來初始化工具的特征。如果您需要根據(jù)自己的需要進一步使用onload事件,請在名為windowOnload的頁面中添加一個新函數(shù),并將代碼放在那里。
Window onload事件
例如??蛇x地在頁面的< HEAD>部分中
<script language=javascript> function windowOnload() { window.status = new Date().getTime(); } </script>
購買TeeChart Pro AciveX正版授權,請點擊“咨詢在線客服”喲!