Depending on the Chart control you are using, you can use different features and techniques to make your Chart control interactive.

In the Chart control for ASP.NET, you can use client-side image maps for a richer user experience in the interactivity of your charts. To enable image maps, set the IsMapEnabled property to True.

Then, you can do one or more of the following:

  • Specify the map area properties in a specific element of the Chart control. You can do this in most elements, such as Axis, Series, DataPoint, Annotation, StripLine, LegendCellColumn, LegendItem, and LegendCell.

    In each of these elements, use the Tooltip and Url properties. They correspond to the alt and href attributes in the HTML MAP tag. To specify additional map area attributes, use the MapAreaAttributes property. To specify multiple attributes, separate them with spaces. For example, you can specify the following code in this property to register a client-side script that displays another chart as a pop-up tooltip:

    onmouseover=\"DisplayTooltip(' <img src=DetailedChart.aspx />');\"

    Note that script above requires that the Chart control in DetailedChart.aspx uses binary streaming as the render type. For more information, see Chart Image Rendering.

  • Manually define map areas in your chart control using the MapAreas collection property (a collection of MapArea objects).

    You can define in each MapArea object the shape, coordinates, URL, and tooltip of the map area. They correspond to the following respective attributes in the HTML MAP tag: shape, coord, href, and alt.

    To specify additional map area attributes that do not have a corresponding property in the MapArea object, specify it in the MapAreaAttributes property.

  • Use the PostBackValue property in MapArea or any of the Chart control elements mentioned above to define a post back value to ImageMapEventHandler, and then retrieve the post back value via the PostBackValue property when the event is triggered.

    Note Note

    You can use applicable keywords in all these attributes. For more information, see Keywords.

The following code toggles a legend cell's image between selected and cleared every time the user clicks on the legend cell.

using System.Web.UI.DataVisualization.Charting;
// Set the legend cell to an image showing selection cleared
Chart1.Legends[0].CustomItems[0].Cells[0].Image = "./cleared.png";
Chart1.Legends[0].CustomItems[0].Cells[0].PostBackValue = "item 1";
// Add an ImageMapEventHandler to the Chart.Click event
this.Chart1.Click += new ImageMapEventHandler(this.Chart1_Click);
// Change the selection image when the user clicks on the legend cell
private void Chart1_Click(object sender, System.Web.UI.WebControls.ImageMapEventArgs e)
   if (e.PostBackValue == "item 1")
      LegendCell cell = Chart1.Legends[0].CustomItems[0].Cells[0];
      cell.Image = (cell.Image == "./cleared.png") ? "./selected.png" : "./cleared.png";

In the Chart control for Windows Forms, you use mouse events and the HitTest method to enable chart interactivity. You can also use cursors, scrolling, and zooming. For more information, see Cursors, Zooming, and Scrolling.

The following example code uses the OnMouseMove event to highlight a data point when the cursor moves over it.

this.Chart1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Chart1_MouseMove);
private void Chart1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
   // Call HitTest
   HitTestResult result = Chart1.HitTest( e.X, e.Y );

   // Reset Data Point Attributes
   foreach( DataPoint point in Chart1.Series[0].Points )
   point.BackSecondaryColor = Color.Black;
   point.BackHatchStyle = ChartHatchStyle.None;
   point.BorderWidth = 1;

   // If the mouse if over a data point
   if(result.ChartElementType == ChartElementType.DataPoint)
      // Find selected data point
      DataPoint point = Chart1.Series[0].Points[result.PointIndex];

      // Change the appearance of the data point
      point.BackSecondaryColor = Color.White;
      point.BackHatchStyle = ChartHatchStyle.Percent25;
      point.BorderWidth = 2;
      // Set default cursor
      this.Cursor = Cursors.Default;