这个示例展示了当鼠标悬停在系列点上时,如何显示从 WebChartControl 的数据源获得的自定义数据。 可以使用 ASPxPopupControl 来完成此任务,其中放置有 ASPxCallbackPanel,以便于在 callbacks 期间获得数据。
Show Me |
---|
在 DevExpress Code Central 数据库中可以找到完整的示例项目,网址是 http://www.devexpress.com/example=E258。 取决于目标平台类型 (ASP.NET、WinForms 等),可以在线运行本示例,或者下载自动可执行的示例。 |
要实现 Web 图表的工具提示,则执行下列操作。
-
新建一个或者打开现有的 ASP.NET Web 应用程序 (Visual Studio 2005、2008 或 2010)。
-
从 DX.10.2: Navigation & Layout 工具箱标签页中,把 ASPxPopupControl 控件拖放到页面上。
把它的 ASPxPopupControl.ClientInstanceName 属性设置为 pc。
-
然后,从相同的工具箱标签页中,把 ASPxCallbackPanel 控件拖放到 ASPxPopupControl1 中。
把它的 ASPxCallbackPanel.ClientInstanceName 属性设置为 cbp。
-
现在,切换到 DX.10.2: Common Controls 工具箱标签页,并把两个 ASPxLabel 控件放置在 ASPxCallbackPanel1 中。
-
现在,选中 ASPxCallbackPanel1,并单击它的智能标记。 在操作列表中,单击 Client-Side Events(客户端事件)... 链接。
在被调用的对话框中,以下列方式接管 CallbackClientSideEvents.EndCallback 事件。
JScript 复制代码 function(s, e) { pc.SetHeaderText(s.cpHeaderText); pc.ShowAtPos(pcX, pcY); }
-
以类似的方式,单击图表的智能标记,并在操作列表中,单击 Client-Side Events(客户端事件)... 链接。
在被调用的对话框中,以下列方式接管 ChartClientSideEvents.ObjectSelected 事件。
JScript 复制代码 function(s, e) { if (e.hitInfo.inSeries) { var obj = e.additionalHitObject; if (obj != null){ pcX = e.absoluteX; pcY = e.absoluteY; cbp.PerformCallback(obj.argument); } } }
-
现在,以下列方式接管 ASPxCallbackPanel.Callback 事件。
C# 复制代码 using System; using System.Data; using System.Web.UI; using System.Collections; using DevExpress.Web.ASPxClasses; // ... string headerText = null; protected void ASPxCallbackPanel1_Callback(object sender, CallbackEventArgsBase e) { String param = e.Parameter.Replace("'", "''"); AccessDataSource1.SelectCommand = "SELECT * FROM [Products] WHERE ProductName = '" + param + "'"; IEnumerable data = AccessDataSource1.Select(DataSourceSelectArguments.Empty); foreach (DataRowView row in data) { ASPxLabel1.Text = "Price: " + row["UnitPrice"].ToString(); ASPxLabel2.Text = "Units in Stock: " + row["UnitsInStock"].ToString(); headerText = row["ProductName"].ToString(); break; } }
Visual Basic 复制代码 Imports System Imports System.Data Imports System.Web.UI Imports System.Collections Imports DevExpress.Web.ASPxClasses ' ... Private headerText As String = Nothing Protected Sub ASPxCallbackPanel1_Callback(ByVal source As Object, _ ByVal e As CallbackEventArgsBase) AccessDataSource1.SelectCommand = _ "SELECT * FROM [Products] WHERE ProductName = '" & e.Parameter & "'" Dim data As IEnumerable = AccessDataSource1.Select(DataSourceSelectArguments.Empty) For Each row As DataRowView In data ASPxLabel1.Text = "Price: " & row("UnitPrice").ToString() ASPxLabel2.Text = "Units in Stock: " & row("UnitsInStock").ToString() headerText = row("ProductName").ToString() Exit For Next row End Sub
-
并且在 ASPxCallbackPanel.CustomJSProperties 事件处理程序中编写下列代码。
C# 复制代码 protected void ASPxCallbackPanel1_CustomJSProperties(object sender, CustomJSPropertiesEventArgs e) { if (headerText != null) e.Properties.Add("cpHeaderText", headerText); }
Visual Basic 复制代码 Protected Sub ASPxCallbackPanel1_CustomJSProperties(ByVal sender As Object, _ ByVal e As CustomJSPropertiesEventArgs) If Not headerText Is Nothing Then e.Properties.Add("cpHeaderText", headerText) End If End Sub
运行此应用程序,并查看结果。