How to display the summary values of the WinForms GridGroupingControl in the essential chart?
Display summary values
The ranges and values of the Chart control are extracted from the values of the WinForms gridgroupingcontrol. In the sample, the minimum and maximum values are taken from the values in the group. When the groups or records change, the GroupedColumn_Changed and RecordValueChanged events are handled. An additional timer is added to delay the update slightly so that the summary value is available. The drawing of the Chart is done by the SetChartData method.
C#
//Hooking the GroupedColumn changes and RecordValueChanged events in the Form_Load this.gridGroupingControl1.TableDescriptor.GroupedColumns.Changed += new Syncfusion.Collections.ListPropertyChangedEventHandler(GroupedColumns_Changed); this.gridGroupingControl1.RecordValueChanged += new RecordValueChangedEventHandler(gridGroupingControl1_RecordValueChanged); //Changes the Chart data private void GroupedColumns_Changed(object sender, Syncfusion.Collections.ListPropertyChangedEventArgs e) { SetChartData(); } //Need to delay the update slightly so the summary value is available private Timer t = null; private void gridGroupingControl1_RecordValueChanged(object sender, RecordValueChangedEventArgs e) { if(t == null) { t = new Timer(); t.Interval = 20; t.Tick += new EventHandler(t_Tick); } t.Start(); } private void t_Tick(object sender, EventArgs e) { Timer t = sender as Timer; t.Stop(); SetChartData(); }
VB
'Hooking the GroupedColumn changes and RecordValueChanged events in the Form_Load Private Me.gridGroupingControl1.TableDescriptor.GroupedColumns.Changed += New Syncfusion.Collections.ListPropertyChangedEventHandler(AddressOf GroupedColumns_Changed) Private Me.gridGroupingControl1.RecordValueChanged += New RecordValueChangedEventHandler(AddressOf gridGroupingControl1_RecordValueChanged) 'Changes the Chart data Private Sub GroupedColumns_Changed(ByVal sender As Object, ByVal e As Syncfusion.Collections.ListPropertyChangedEventArgs) SetChartData() End Sub 'Need to delay the update slightly so the summary value is available Private t As Timer = Nothing Private Sub gridGroupingControl1_RecordValueChanged(ByVal sender As Object, ByVal e As RecordValueChangedEventArgs) If t Is Nothing Then t = New Timer() t.Interval = 20 AddHandler t.Tick, AddressOf t_Tick End If t.Start() End Sub Private Sub t_Tick(ByVal sender As Object, ByVal e As EventArgs) Dim t As Timer = TryCast(sender, Timer) t.Stop() SetChartData() End Sub
SetChartData() method
In this method, the properties of the Chart are set. Based on the Summary values of the GridGroupingControl, the Chart is drawn.
C#
private void SetChartData() { int numPoints = this.gridGroupingControl1.Table.TopLevelGroup.Groups.Count; try { ChartSeries series = new ChartSeries(); double yMax = double.MinValue; double yMin = double.MaxValue; double xMin = double.MaxValue; double xMax = double.MinValue; for(int j = 0; j < numPoints; j++) { Group g = this.gridGroupingControl1.Table.TopLevelGroup.Groups[j]; double x; double y; if(double.TryParse(g.Category.ToString(), System.Globalization.NumberStyles.Any, null, out x) && double.TryParse(GridEngine.GetSummaryText(g, this.scd), System.Globalization.NumberStyles.Any, null, out y)) { series.Points.Add(x, y); if(y < yMin) yMin = y; if(y > yMax) yMax = y; if(x < xMin) xMin = x; if(x > xMax) xMax = x; } } this.chartControl1.Indexed = false; this.chartControl1.ZoomFactorX = 1; this.chartControl1.ZoomFactorY = 1; this.chartControl1.PrimaryXAxis.DrawGrid = false; this.chartControl1.PrimaryYAxis.DrawGrid = false; this.chartControl1.PrimaryYAxis.RangeType = ChartAxisRangeType.Set; this.chartControl1.PrimaryYAxis.Range.Max = yMax; this.chartControl1.PrimaryYAxis.Range.Min = yMin; this.chartControl1.PrimaryYAxis.Range.Interval = (yMax - yMin) / 4; this.chartControl1.PrimaryYAxis.Font = new Font(this.Font.Name, 8); this.chartControl1.PrimaryXAxis.RangeType = ChartAxisRangeType.Set; this.chartControl1.PrimaryXAxis.Range.Max = xMax; this.chartControl1.PrimaryXAxis.Range.Min = xMin; this.chartControl1.PrimaryXAxis.Range.Interval = 2; this.chartControl1.Legend.Visible = false; series.Type = ChartSeriesType.Line; series.Style.DisplayShadow = false; this.chartControl1.Series.Add(series); this.chartControl1.Redraw(true); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
VB
Private Sub SetChartData() Dim numPoints As Integer = Me.gridGroupingControl1.Table.TopLevelGroup.Groups.Count Try Dim series As New ChartSeries() Dim yMax As Double = Double.MinValue Dim yMin As Double = Double.MaxValue Dim xMin As Double = Double.MaxValue Dim xMax As Double = Double.MinValue For j As Integer = 0 To numPoints - 1 Dim g As Group = Me.gridGroupingControl1.Table.TopLevelGroup.Groups(j) Dim x As Double Dim y As Double If Double.TryParse(g.Category.ToString(), System.Globalization.NumberStyles.Any, Nothing, x) AndAlso Double.TryParse(GridEngine.GetSummaryText(g, Me.scd), System.Globalization.NumberStyles.Any, Nothing, y) Then series.Points.Add(x, y) If y < yMin Then yMin = y End If If y > yMax Then yMax = y End If If x < xMin Then xMin = x End If If x > xMax Then xMax = x End If End If Next j Me.chartControl1.Indexed = False Me.chartControl1.ZoomFactorX = 1 Me.chartControl1.ZoomFactorY = 1 Me.chartControl1.PrimaryXAxis.DrawGrid = False Me.chartControl1.PrimaryYAxis.DrawGrid = False Me.chartControl1.PrimaryYAxis.RangeType = ChartAxisRangeType.Set Me.chartControl1.PrimaryYAxis.Range.Max = yMax Me.chartControl1.PrimaryYAxis.Range.Min = yMin Me.chartControl1.PrimaryYAxis.Range.Interval = (yMax - yMin) / 4 Me.chartControl1.PrimaryYAxis.Font = New Font(Me.Font.Name, 8) Me.chartControl1.PrimaryXAxis.RangeType = ChartAxisRangeType.Set Me.chartControl1.PrimaryXAxis.Range.Max = xMax Me.chartControl1.PrimaryXAxis.Range.Min = xMin Me.chartControl1.PrimaryXAxis.Range.Interval = 2 Me.chartControl1.Legend.Visible = False series.Type = ChartSeriesType.Line series.Style.DisplayShadow = False Me.chartControl1.Series.Add(series) Me.chartControl1.Redraw(True) Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub
The following screenshot displays the summary value in the Chart.
Samples:
Conclusion
I hope you enjoyed learning about how to display the summary values of the WinForms GridGroupingControl in the essential chart.
You can refer to our WinForms GridGroupingControl feature tour page to know about its other groundbreaking feature representations. You can also explore our WinForms GridGroupingControl to understand how to present and manipulate data.
For current customers, you can check out our WinForms Controls from the License and Downloads page. If you are new to Syncfusion, you can try our 30-day free trial to check out our WinForms GridGroupingControl and other WinForms controls.
If you have any queries or require clarifications, please let us know in comments below. You can also contact us through our support forums, Direct-Trac, or feedback portal. We are always happy to assist you!