Modifying colors, fill patterns, and other data

The following methods allow you to modify the appearance of data in a graph and get information about current settings:

Table 8-3: Get and set methods for the display of data in graphs

Method

Information provided or set

GetDataStyle

The color, fill pattern, and other visual properties of a specified data point

GetSeriesStyle

The color, fill pattern, and other visual properties of a specified series

SetDataStyle

The color, fill pattern, and other visual properties for a specific data point

SetSeriesStyle

The color, fill pattern, and other visual properties for a series

These Get methods return an instance of either the GraphDataStyle or GraphSeriesStyle class. The Set methods take a GraphDataStyle or GraphSeriesStyle object as an argument. Typically you use the Get method to obtain an instance of the class, specify new values for the properties you want to change, and then use the Set method to set the display properties.

NoteTurn redrawing off To eliminate flicker that can occur because of interrelationships among properties, call SetRedrawOff before calling the SetDataStyle and SetSeriesStyle methods, then call SetRedrawOn to turn redrawing back on and Refresh to display any pending visual changes. For example:

dw1.SetRedrawOff()
gobGraph.SetDataStyle(pointStyle)
dw1.SetRedrawOn()
dw1.Refresh()

The GraphSeriesStyle class has properties for background and foreground color, fill style and shade color, line color, style, and width, symbol style, and whether the data is an overlay. The GraphDataStyle class inherits from the GraphSeriesStyle class and adds a property, PieExplosionPercentage, that reports or sets the percentage that an exploded pie slice in a pie graph is moved away from the center of the pie in order to draw attention to the data.

Example

The following example lets a user change a display property of a graph by double-clicking the property in a list view, which opens a dialog box in which the user can set properties.

Private Sub lvDataPoint_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvDataPoint.DoubleClick

  Dim lvi As ListViewItem
  Dim dialog As frmChooseStyle
  Dim pointStyle As Sybase.DataWindow.GraphDataStyle
  Dim gobGraph As Sybase.DataWindow.GraphicObjectGraph
 
  ' data point values are not editable
  If lvDataPoint.FocusedItem.Text.IndexOf("Value")  _
    =-1 Then
 
     ' clone the item with focus and send it off
     ' to dialog for processing
     lvi = lvDataPoint.FocusedItem.Clone()
     dialog = New frmChooseStyle(lvi)
 
     ' upon return update the real ListViewItem 
     ' with the change
     If dialog.ShowDialog() = DialogResult.OK Then
       lvDataPoint.FocusedItem.SubItems.Item(1) =  _
         lvi.SubItems.Item(1)
 
       ' get the current data point style
       gobGraph =  _
         CType(dw1.GetObjectByName("gr_1"),  _
         Sybase.DataWindow.GraphicObjectGraph)
       pointStyle =  _
          gobGraph.GetDataStyle(cbSeries.Text,  _
          nupDataPoint.Value)
 
       ' update data style depending on option 
       ' that changed
      Select Case lvDataPoint.FocusedItem.Text
      Case "Foreground Color"
         pointStyle.ForegroundColor =  _
         System.Drawing.Color.FromArgb(Val("&H" +  _
         lvi.SubItems.Item(1).Text))
      Case "Background Color"
         pointStyle.BackgroundColor =  _
         System.Drawing.Color.FromArgb(Val("&H" + _
         lvi.SubItems.Item(1).Text))
      Case "Shade Color"
         pointStyle.ShadeColor =  _
         System.Drawing.Color.FromArgb(Val("&H" +  _
         lvi.SubItems.Item(1).Text))
      Case "Line Color"
         pointStyle.LineColor =  _
         System.Drawing.Color.FromArgb(Val("&H" +  _
         lvi.SubItems.Item(1).Text))
      Case "Symbol Style"
         pointStyle.SymbolStyle =  _
         System.Enum.Parse(GetType  _
         (Sybase.DataWindow.SymbolStyle),  _
         lvi.SubItems.Item(1).Text, False)
      Case "Line Style"
        pointStyle.LineStyle =  _
        System.Enum.Parse(GetType  _
        (Sybase.DataWindow.LineStyle),  _
        lvi.SubItems.Item(1).Text, False)
      Case "Fill Pattern"
         pointStyle.FillStyle =  _
         System.Enum.Parse(GetType  _
         (Sybase.DataWindow.FillStyle),  _
         lvi.SubItems.Item(1).Text, False)
      Case "Line Width"
         pointStyle.LineWidth =  _
         Convert.ToInt32(lvi.SubItems.Item(1).Text)
       End Select
 
       ' apply the data style change
       gobGraph.SetDataStyle(pointStyle)
    End If
  End If
End Sub