简体   繁体   中英

Interactive Chart with MS Chart Control VB

Hi I'am currently creating a Chart to and img and display it in view. But I would like to make it a little more interactive ... eg. when user put mose over point (in point chart) he can see the values of this point.

Here I create and image of an chart

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

are there any special properties that i may add to make it interactive ? And if I add them maybe I should return something diffrant than an image ?\\

EDIT 1

I have read about tool tips .... but you have to set each tooltip for each series value and still i am not sure if tooltips works when you save chart as img but 'll try it

You can use the Chart.HitTest method together with the MouseMove event to check for the mouse being over a datapoint. Here is an example

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

It first performs a HitTest and assigns the result to the variable h . The property ChartElementType of the HitTestResult defines what elementtype is located at the given coordinates. If it is a datapoint a corresponding tooltip with the coordinates is assigned to the chart.

在此处输入图片说明

If you do it in a temporary image you need to perform the HitTest in your method and draw the tooltip on the image. I don't know why you do it this way, but making an image interactive is not easily done.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM