创建动态图表工具提示

时间:2013-01-21 11:24:32

标签: c# visual-studio-2010 microsoft-chart-controls

我正在使用Visual Studio 2010和WFC来创建数据的点图。为了创建我的图表,我有一个包含3个不同列的数据表;这些是日期,价值和序列。此表是从SQL查询动态生成的,然后我在x轴上绘制日期,在y轴上绘制值。我想要实现的是,当鼠标超过图表上的某个点时,工具提示会显示日期,值和与这些值相关的唯一序列。目前我正在使用

myChart.Series["mySeries"].ToolTip = "XValue = #VALY \r\nDate = #VALX{d}";

然而,显然这并未显示针对这些值的序列号。我尝试使用ToolTip事件但是在尝试从像素中的数据点转换为图形上的精确图时遇到了一些问题。我希望这个问题有道理。

2 个答案:

答案 0 :(得分:2)

我解决了这个问题,感谢@vikas。我没有尝试分配通用工具提示,而是为每个点分配了一个单独的工具提示。

        int points = 0;

        //For every row in the values table, plot the date against the variable value
        foreach (DataRow row in Values.Rows)
        {
            myChart.Series[Variable].Points.AddXY(Convert.ToDateTime(row["Date"].ToString()), row["Variable"].ToString());               
            myChart.Series[Variable].Points[points].ToolTip = Variable + " = #VALY \r\nDate = #VALX{d} \r\nSerial = " + row["Serial"].ToString();
            points += 1;
        }

因此,计数器从0开始,然后对于数据表中的每一行,将值1添加到点数中,并为每个点单独分配唯一工具提示。

答案 1 :(得分:0)

只为了想法

For i As Integer = 0 To dt.Rows.Count - 1
                    StrSeries = Convert.ToString(dt.Rows(i)("Engage_Title"))
                    ChartRecentActivities.Series.Add(StrSeries)
                    ChartRecentActivities.Series(StrSeries).ChartType = SeriesChartType.Line
                    ChartRecentActivities.Series(StrSeries).MarkerStyle = MarkerStyle.Circle
                    ChartRecentActivities.Series(StrSeries).MarkerSize = 7
                    ChartRecentActivities.Series(StrSeries).BorderWidth = 3
                    ChartRecentActivities.Series(StrSeries).ShadowOffset = 2
                    ChartRecentActivities.Series(StrSeries).Legend = "Default"
                    ChartRecentActivities.Series(StrSeries).LegendText = StrSeries
                    ChartRecentActivities.Series(StrSeries).LegendToolTip = StrSeries
                    ChartRecentActivities.Series(StrSeries).ToolTip = StrSeries

                    For j As Integer = 0 To ChartRecentActivities.ChartAreas(0).Axes(0).CustomLabels.Count - 1
                        dv.RowFilter = "Engage_Title = '" & StrSeries & "' AND Transaction_Date = '" & ChartRecentActivities.ChartAreas(0).Axes(0).CustomLabels(j).Text & "'"
                        If (dv.Count > 0) Then
                            dblPoint = Convert.ToDouble(dv.Item(0)(0))
                        Else
                            dblPoint = 0
                        End If
                        ChartRecentActivities.Series(StrSeries).Points.Add(dblPoint)
                        ChartRecentActivities.Series(StrSeries).Points(j).ToolTip = StrSeries & " = " & dblPoint.ToString()
                    Next
                Next

看最后一行

ChartRecentActivities.Series(StrSeries).Points(j).ToolTip = StrSeries & " = " & dblPoint.ToString()