您好我正在创建一个图表并img并在视图中显示它。但我想让它更具互动性......例如。当用户将mose放在点上时(在点图中),他可以看到这一点的值。
在这里,我创建了图表的图像
Function GenerateChart(id As Integer, width As Integer, height As Integer) As ActionResult
' Creating chart
Dim chart = New Chart()
Dim area = New ChartArea()
Dim series = New Series()
chart.Width = width
chart.Height = height
' Adding Series to the Chart
chart.Series.Add("ValueSeries")
chart.Series("ValueSeries").XValueMember = "Date"
chart.Series("ValueSeries").YValueMembers = "Value"
chart.Series("ValueSeries").ChartType = SeriesChartType.Point
'chart.Series("ValueSeries1").AxisLabel = "Label"
' Getting data for series
chart.DataSource = GetDataForChart(id)
chart.DataBind()
chart.ChartAreas.Add(New ChartArea())
' Saving chart as file
Dim returnVal = New MemoryStream()
chart.SaveImage(returnVal)
'Return adress for file
Return File(returnVal.GetBuffer(), "image/png")
End Function
我可以添加任何特殊属性以使其具有交互性吗?如果我添加它们,也许我应该返回一些不同于图像的东西?\
编辑1
我已阅读有关工具提示....但您必须为每个系列值设置每个工具提示仍然我不确定当您将图表保存为img时工具提示是否有效但是会尝试它
答案 0 :(得分:2)
您可以将Chart.HitTest方法与MouseMove事件一起使用来检查鼠标是否在数据点上。这是一个例子
Public Class Form1
Dim ToolTipProvider As New ToolTip
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For i = 1 To 20
Chart1.Series(0).Points.AddXY(i, i ^ 2)
Next
End Sub
Private Sub Chart1_MouseMove(sender As Object, e As MouseEventArgs) Handles Chart1.MouseMove
Dim h As Windows.Forms.DataVisualization.Charting.HitTestResult = Chart1.HitTest(e.X, e.Y)
If h.ChartElementType = DataVisualization.Charting.ChartElementType.DataPoint Then
ToolTipProvider.SetToolTip(Chart1, h.Series.Points(h.PointIndex).XValue & " x " & h.Series.Points(h.PointIndex).YValues(0))
End If
End Sub
End Class
首先执行HitTest并将结果分配给变量h
。
HitTestResult的属性ChartElementType定义了给定坐标处的元素类型。如果是数据点,则将具有坐标的相应工具提示分配给图表。
如果在临时图像中执行此操作,则需要在方法中执行HitTest并在图像上绘制工具提示。我不知道你为什么这样做,但是制作图像互动并不容易。