【问题标题】:Interactive Chart with MS Chart Control VB带有 MS Chart Control VB 的交互式图表
【发布时间】:2014-07-25 12:31:46
【问题描述】:

您好,我目前正在创建一个图表并 img 并将其显示在视图中。但我想让它更具互动性......例如。当用户将鼠标放在点上时(在点图中),他可以看到该点的值。

在这里我创建一个图表的图像

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 时工具提示是否有效,但会尝试一下

【问题讨论】:

  • 这与 highcharts 无关。
  • 为什么要创建图像?为什么不只显示图表本身?
  • 好的,所以我创建了返回图表的函数以及如何显示这个图表?与 html.action ?哦,我忘了添加这是基于 MVC 的应用程序

标签: vb.net charts mschart


【解决方案1】:

您可以将 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 并在图像上绘制工具提示。我不知道你为什么要这样做,但是让图像具有交互性并不容易。

【讨论】:

  • 好的,如果你能帮助我,我将更改函数以返回图表值,稍后如何用剃刀在视图中显示它? html.render 或类似的东西?
  • @JakubWisniewski 我不明白你的意思。打开一个关于该主题的新问题,并详细描述您正在使用的平台以及您想要实现的目标。这里的问题与在某些 Web 应用程序中显示图表无关。
  • 好的 - 很抱歉给您带来不便......感谢您的回复 :)
  • @JakubWisniewski 没有任何不便。这只是 SO 的原则,不要将不同的问题混合在一起。不客气。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-28
  • 2011-11-19
相关资源
最近更新 更多