Common Business Scenarios with Infragistics UltraDataChart

[Infragistics] Mihail Mateev / Thursday, February 19, 2015

Infragistics UltraDataChart Control has been engineered to dramatically simplify the way in which you visually present information to your end-users. Optimized for both performance and flexibility, the WinForms DataChart is a highly customizable control library which can be leveraged in a nearly endless number of business scenarios, be it real-time charting or analysis of multi-dimensional data.

The updated Windows Forms Data Chart is fast, fully-featured, and arguably the most modern Windows Forms chart on the market. Smoothly animate data over time using the innovative Motion Framework, create composite charts, and use multiple series, featuring a range of series that include Line, Stacked Line, Stacked Area, Stacked 100-Bar, Column, Waterfall, Candlestick and more.

 

Using the UltraDataChart

The UltraDataChart offers powerful ways to interact with data, such as zooming, trendlines and chart synchronization. In addition to all the types supported by the XamChart, UltraDataChart supports polar and radial series types. It enables developers to not only visualize the data, but also enable users to interact with it. The UltraDataChart only supports 2D chart types, and chart types which do not require an axis, such as a pie, and funnel will be implemented by separate controls like the Pie Chart, Funnel Chart etc.

 

How do you use the UltraDataChart

  • Declare the axes (the UltraDataChart supports string (CategoryXAxis, CategoryYAxis, CategoryAngleAxis), numeric (NumericXAxis, NumericYAxis, NumericRadiusAxis, NumericAngleAxis), and date (CategoryDateTimeAxis). In this case we’d like to have dates along the X axis, and numeric values along the Y axis, so we’re using the CategoryDateTimeXAxis and the NumericYAxis.
  • Declare the series, referencing the two axes
  • Declare tooltips

 

Infragistics Windows Forms UltraDataChart High Performance Scenarios

When you’re dealing with real-time or large volumes of data, the three most critical factors for the user experience of your application are performance, performance and…performance! Customers are often interested in the performance of the UltraDataChart (the fast chart component featuring zooming and panning in Infragistics Windows Forms controls). Rather than just say “well, they’re capable of handling millisecond-based updates without noticeable delay in rendering, and are in use at mission-critical applications handling real-time and high-volume data", let's see the chart in action in a few different high performance scenarios!

 

UltraDataChart real-time data scenario

This scenario shows the UltraDataChart bound to a real-time data feed. You can start or stop the real-time data feed by clicking the Toggle Live Data button, and can modify the speed of data update and the amount of data displayed in the chart control using the two sliders above. You can see the time it takes to layout the points in the chart in the label above it, just so you can get an idea of how fast the UltraDataChart really is.

The source code is available below:

 1: using System;
 2: using System.Collections;
 3: using System.Collections.Generic;
 4: using System.Collections.ObjectModel;
 5: using System.Drawing;
 6: using System.Globalization;
 7: using System.Linq;
 8: using System.Windows.Forms;
 9: using Infragistics.Controls.Charts;
 10: using Infragistics.Extension.Models;
 11: using Infragistics.Extension.Services;
 12: using Infragistics.Win.DataVisualization;
 13: using HorizontalAlignment = Infragistics.Portable.Components.UI.HorizontalAlignment;
 14:  
 15: namespace Infragistics.Samples
 16: {
 17:     public partial class SampleForm : Form
 18:     {
 19:         #region Default constructor
 20:         public SampleForm()
 21:         {
 22:             InitializeComponent();
 23:             Load += OnFormLoaded;
 24:             btnReset.Click += btnReset_Click;
 25:         }
 26:         #endregion // Default constructor
 27:  
 28:         #region Protected Members
 29:         protected DataStockService StockService;
 30:         protected UltraDataChart PriceChart;
 31:         protected UltraDataChart VolumeChart;
 32:         #endregion // Protected Members
 33:  
 34:         #region Events
 35:  
 36:         #region OnFormLoaded
 37:         private void OnFormLoaded(object sender, EventArgs e)
 38:         {
 39:             InitializeForm();
 40:  
 41:             StockService = new DataStockService();
 42:             StockService.DataStockReceived += StockService_DataStockReceived;
 43:  
 44:             var data = StockService.DataPoints;
 45:  
 46:             PriceChart = CreatePriceChart(data);
 47:             VolumeChart = CreateVolumeChart(data);
 48:  
 49:             var table = new TableLayoutPanel
 50:             {
 51:                 Dock = DockStyle.Fill,
 52:                 AutoSizeMode = AutoSizeMode.GrowOnly,
 53:                 GrowStyle = TableLayoutPanelGrowStyle.AddRows
 54:             };
 55:             table.Controls.Add(PriceChart, 0, 1);
 56:             table.Controls.Add(VolumeChart, 0, 2);
 57:  
 58:             PanelCenter.ClientArea.Controls.Add(table);
 59:         }
 60:         #endregion // OnFormLoaded
 61:  
 62:         #region btnReset_Click
 63:         void btnReset_Click(object sender, EventArgs e)
 64:         {
 65:             PriceChart.ResetZoom();
 66:             VolumeChart.ResetZoom();
 67:         }
 68:         #endregion // btnReset_Click
 69:  
 70:         #region StockService_DataStockReceived
 71:         void StockService_DataStockReceived(object sender, DataStockReceivedEventArgs e)
 72:         {
 73:             //var data = StockService.DataPoints;
 74:             var data = new DataStockList();
 75:             data.AddRange(StockService.DataPoints);
 76:  
 77:             UpdatePriceChart(data);
 78:             UpdateVolumeChart(data);
 79:         }
 80:         #endregion // StockService_DataStockReceived
 81:  
 82:         #region OnAxisXFormatLabel
 83:         string OnAxisXFormatLabel(AxisLabelInfo info)
 84:         {
 85:             var item = info.Item as DataStockPoint;
 86:             if (item != null) return item.Date.ToString("yyyy/MM/dd");
 87:  
 88:             return info.ToString();
 89:         }
 90:         #endregion // OnAxisXFormatLabel
 91:  
 92:         #region OnAxisYFormatLabel
 93:         string OnAxisYFormatLabel(AxisLabelInfo info)
 94:         {
 95:             var axisValue = info.Value;
 96:             if (axisValue < 1000)
 97:                 return string.Format("{0:0.#}", axisValue);
 98:             if (axisValue < 1000000)
 99:                 return string.Format("{0:#,0,.#} K", axisValue);
 100:             if (axisValue < 1000000000)
 101:                 return string.Format("{0:#,0,,.#} M", axisValue);
 102:             if (axisValue < 1000000000000)
 103:                 return string.Format("{0:#,0,,,.#} B", axisValue);
 104:  
 105:             return axisValue.ToString();
 106:         }
 107:         #endregion // OnAxisYFormatLabel
 108:  
 109:         #endregion
 110:  
 111:         #region Methods
 112:  
 113:         #region InitializeForm
 114:         public void InitializeForm()
 115:         {
 116:             speedEditor.ValueChanged += speedEditor_ValueChanged;
 117:             btnStartService.Click += btnStartService_Click;
 118:  
 119:             // Add the form's caption as the sample name
 120:             ultraFormManager1.FormStyleSettings.Caption = Properties.Resources.SampleTitle;
 121:  
 122:             // Add button images on the form
 123:             this.LoadImagesFor(SplitterTop, SplitterRight);
 124:  
 125:             // Add the sample description
 126:             sampleInfo.SampleDescription = Resources.SamplesBrowser.SamplesBrowser.SampleDescription;
 127:             sampleInfo.SampleCodeCSharp = Properties.Resources.CS_CodeView;
 128:             sampleInfo.SampleCodeVBasic = Properties.Resources.VB_CodeView;
 129:             sampleInfo.SampleTitle = Properties.Resources.CodeViewerTitle;
 130:  
 131:             speedEditor.PropertyName = Properties.Resources.SpeedEditor_Label;
 132:         }
 133:         #endregion // InitializeForm
 134:  
 135:         #region CreatePriceChart
 136:         public UltraDataChart CreatePriceChart(DataStockList data)
 137:         {
 138:             var chart = new UltraDataChart
 139:             {
 140:                 Width = 400,
 141:                 Height = 200,
 142:                 Dock = DockStyle.Fill,
 143:                 BackColor = System.Drawing.Color.White,
 144:                 PlotAreaBackground = new SolidColorBrush { Color = Color.White },
 145:                 Title = data.CompanyName,
 146:                 Subtitle = Properties.Resources.StockPrice,
 147:                 VerticalZoomable = true,
 148:                 HorizontalZoomable = true
 149:             };
 150:  
 151:             var xAxis = new CategoryXAxis
 152:             {
 153:                 Label = "Date",
 154:                 DataSource = data,
 155:                 LabelLocation = AxisLabelsLocation.OutsideBottom,
 156:                 UseClusteringMode = true
 157:             };
 158:             xAxis.FormatLabel += OnAxisXFormatLabel;
 159:  
 160:             var yAxis = new NumericYAxis
 161:             {
 162:                 LabelExtent = 50,
 163:                 LabelHorizontalAlignment = HorizontalAlignment.Right
 164:             };
 165:             yAxis.FormatLabel += OnAxisYFormatLabel;
 166:  
 167:             var yAxis2 = new NumericYAxis
 168:             {
 169:                 LabelExtent = 20,
 170:                 LabelLocation = AxisLabelsLocation.OutsideRight
 171:             };
 172:  
 173:             var series = new AreaSeries
 174:             {
 175:                 DataSource = data,
 176:                 ValueMemberPath = "Open",
 177:                 XAxis = xAxis,
 178:                 YAxis = yAxis,
 179:                 MarkerType = MarkerType.None,
 180:                 IsHighlightingEnabled = true
 181:             };
 182:  
 183:             chart.Axes.Add(xAxis);
 184:             chart.Axes.Add(yAxis);
 185:             chart.Axes.Add(yAxis2);
 186:             chart.Series.Add(series);
 187:             return chart;
 188:         }
 189:         #endregion // CreatePriceChart
 190:  
 191:         #region CreateVolumeChart
 192:         public UltraDataChart CreateVolumeChart(DataStockList data)
 193:         {
 194:             var chart = new UltraDataChart
 195:             {
 196:                 BackColor = System.Drawing.Color.White,
 197:                 PlotAreaBackground = new SolidColorBrush { Color = Color.White },
 198:                 Dock = DockStyle.Fill,
 199:                 Width = 400,
 200:                 Height = 200,
 201:                 Padding = new Padding(0, 0, 20, 0),
 202:                 Subtitle = Properties.Resources.StockVolume,
 203:                 VerticalZoomable = true,
 204:                 HorizontalZoomable = true
 205:             };
 206:  
 207:             var xAxis = new CategoryXAxis
 208:             {
 209:                 Label = "Date",
 210:                 DataSource = data,
 211:                 LabelLocation = AxisLabelsLocation.OutsideBottom
 212:             };
 213:             xAxis.FormatLabel += OnAxisXFormatLabel;
 214:  
 215:             var yAxis = new NumericYAxis
 216:             {
 217:                 LabelExtent = 50,
 218:                 LabelHorizontalAlignment = HorizontalAlignment.Right
 219:             };
 220:             yAxis.FormatLabel += OnAxisYFormatLabel;
 221:  
 222:             var yAxis2 = new NumericYAxis
 223:             {
 224:                 LabelExtent = 20,
 225:                 LabelLocation = AxisLabelsLocation.OutsideRight
 226:             };
 227:  
 228:             var series = new ColumnSeries
 229:             {
 230:                 DataSource = data,
 231:                 ValueMemberPath = "Volume",
 232:                 XAxis = xAxis,
 233:                 YAxis = yAxis,
 234:                 IsHighlightingEnabled = true,
 235:                 IsTransitionInEnabled = false
 236:             };
 237:  
 238:             chart.Axes.Add(xAxis);
 239:             chart.Axes.Add(yAxis);
 240:             chart.Axes.Add(yAxis2);
 241:             chart.Series.Add(series);
 242:             return chart;
 243:         }
 244:         #endregion // CreateVolumeChart
 245:  
 246:         #region UpdatePriceChart
 247:         private void UpdatePriceChart(IEnumerable data)
 248:         {
 249:             var DataSource = data as object[] ?? data.Cast<object>().ToArray();
 250:  
 251:             var series = PriceChart.Series.FirstOrDefault();
 252:             if (series != null)
 253:             {
 254:                 series.DataSource = DataSource;
 255:                 series.RenderSeries(false);
 256:             }
 257:  
 258:             var xAxis = PriceChart.Axes[0] as CategoryXAxis;
 259:             if (xAxis != null)
 260:             {
 261:                 xAxis.DataSource = DataSource;
 262:                 xAxis.RenderAxis();
 263:             }
 264:         }
 265:         #endregion // UpdatePriceChart
 266:  
 267:         #region UpdateVolumeChart
 268:         private void UpdateVolumeChart(IEnumerable data)
 269:         {
 270:             var DataSource = data as object[] ?? data.Cast<object>().ToArray();
 271:  
 272:             var series = VolumeChart.Series.FirstOrDefault();
 273:             if (series != null)
 274:             {
 275:                 series.DataSource = DataSource;
 276:                 series.RenderSeries(false);
 277:             }
 278:  
 279:             var xAxis = VolumeChart.Axes[0] as CategoryXAxis;
 280:             if (xAxis != null)
 281:             {
 282:                 xAxis.DataSource = DataSource;
 283:                 xAxis.RenderAxis();
 284:             }
 285:         }
 286:         #endregion // UpdateVolumeChart
 287:  
 288:         #region speedEditor_ValueChanged
 289:         void speedEditor_ValueChanged(object sender, EventArgs e)
 290:         {
 291:             var value = speedEditor.PropertyValue;
 292:             StockService.UpdateInterval = TimeSpan.FromMilliseconds(value);
 293:         }
 294:         #endregion // speedEditor_ValueChanged
 295:  
 296:         #region btnStartService_Click
 297:         void btnStartService_Click(object sender, EventArgs e)
 298:         {
 299:             if (StockService.IsEnabled)
 300:                 StockService.Stop();
 301:             else
 302:                 StockService.Start();
 303:         }
 304:         #endregion // btnStartService_Click
 305:  
 306:         #endregion // Methods
 307:     }
 308:  
 309:     #region StockInformation class
 310:     public class StockInformation
 311:     {
 312:         public string CompanyName;
 313:         public string StockSymbol;
 314:     } 
 315:     #endregion // StockInformation class
 316: }

 

UltraDataChart high-volume data scenario

The UltraDataChart high-volume data scenario allows the user to set the number of points to be bound to the chart control. You can use big amount of data - this chart can fit more than a year’s worth of data readings taken each second - but feel free to increase that according to the requirements of your scenario. You can try the zooming and panning using the mouse and zoombars to see the level of performance this component delivers when bound to such a high-volume dataset.

When changing only one or two points in data that is bound to the Series object’s DataSource property, you should avoid sending the Reset event from the INotifyCollectionChanged interface. In the prior version of the UltraDataChart control, sending one refresh event instead of several smaller events was preferable.

This code snippet shows how to notify about changes in custom collection using the Add event action instead of the Reset event action when a new data point is added to the collection.

 1: using System.Collections;
 2: using System.Collections.Generic;
 3: using System.Collections.Specialized;
 4: using NotifyEventArgs = System.Collections.Specialized.NotifyCollectionChangedEventArgs;
 5: using NotifyAction = System.Collections.Specialized.NotifyCollectionChangedAction;
 6:  
 7: public class DataCollection : INotifyCollectionChanged, IEnumerable
 8: {
 9:         protected List Data = new List();
 10:         public event NotifyCollectionChangedEventHandler CollectionChanged;
 11:         protected void OnCollectionChanged(NotifyEventArgs e)
 12:         {
 13:             if (CollectionChanged != null)
 14:             {
 15:                 CollectionChanged(this, e);
 16:             }
 17:         } 
 18:         public IEnumerator GetEnumerator()
 19:         {
 20:             return this.Data.GetEnumerator();
 21:         } 
 22:         public void Add(DataPoint dataPoint)
 23:         {
 24:             this.Data.Add(dataPoint);
 25:             NotifyEventArgs e = new NotifyEventArgs(NotifyAction.Add, dataPoint);
 26:             // use the Add event action instead of the Reset event action 
 27:             // when adding only one or two points to the collection
 28:             //NotifyEventArgs e = new NotifyEventArgs(NotifyAction.Reset);
 29:             this.OnCollectionChanged(e);
 30:         } 
 31: } 

 

Motion Framework

You can animate data over time using the innovative Motion Framework, create composite charts, and use multiple series with our new Windows Forms Data Chart control. This approach is used mainly when you have multidimensional data and one of the dimensions is time. You can demonstrate how values are changed during the time using awesome animations.

 

 

This sample demonstrates how to use the Motion Framework™ with the DataChart control to build highly engaging visualizations and provide smooth playback of changes in data over time.

 1: using Infragistics.Extension;
 2:  
 3: namespace Infragistics.Samples
 4: {
 5:     partial class MotionFramework
 6:     {
 7:         /// 
 8:         /// Required designer variable.
 9:         /// 
 10:         private System.ComponentModel.IContainer components = null;
 11:  
 12:         /// 
 13:         /// Clean up any resources being used.
 14:         /// 
 15:         ///true if managed resources should be disposed; otherwise, false.
 16:         protected override void Dispose(bool disposing)
 17:         {
 18:             if (disposing && (components != null))
 19:             {
 20:                 components.Dispose();
 21:             }
 22:             base.Dispose(disposing);
 23:         }
 24:  
 25:         #region Windows Form Designer generated code
 26:  
 27:         /// 
 28:         /// Required method for Designer support - do not modify
 29:         /// the contents of this method with the code editor.
 30:         /// 
 31:         private void InitializeComponent()
 32:         {
 33:             this.components = new System.ComponentModel.Container();
 34:             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MotionFramework));
 35:             this.ultraFormManager1 = new Infragistics.Win.UltraWinForm.UltraFormManager(this.components);
 36:             this._CardView_UltraFormManager_Dock_Area_Left = new Infragistics.Win.UltraWinForm.UltraFormDockArea();
 37:             this._CardView_UltraFormManager_Dock_Area_Right = new Infragistics.Win.UltraWinForm.UltraFormDockArea();
 38:             this._CardView_UltraFormManager_Dock_Area_Top = new Infragistics.Win.UltraWinForm.UltraFormDockArea();
 39:             this._CardView_UltraFormManager_Dock_Area_Bottom = new Infragistics.Win.UltraWinForm.UltraFormDockArea();
 40:             this.MainPanel = new Infragistics.Win.Misc.UltraPanel();
 41:             this.PanelCenter = new Infragistics.Win.Misc.UltraPanel();
 42:             this.SplitterRight = new Infragistics.Win.Misc.UltraSplitter();
 43:             this.PanelRight = new Infragistics.Win.Misc.UltraPanel();
 44:             this.btnToggleAnimation = new Infragistics.Win.Misc.UltraButton();
 45:             this.SplitterTop = new Infragistics.Win.Misc.UltraSplitter();
 46:             this.PanelTop = new Infragistics.Win.Misc.UltraPanel();
 47:             this.sampleInfo = new Infragistics.Extension.SampleInfoControl();
 48:             ((System.ComponentModel.ISupportInitialize)(this.ultraFormManager1)).BeginInit();
 49:             this.MainPanel.ClientArea.SuspendLayout();
 50:             this.MainPanel.SuspendLayout();
 51:             this.PanelCenter.SuspendLayout();
 52:             this.PanelRight.ClientArea.SuspendLayout();
 53:             this.PanelRight.SuspendLayout();
 54:             this.PanelTop.ClientArea.SuspendLayout();
 55:             this.PanelTop.SuspendLayout();
 56:             this.SuspendLayout();
 57:             // 
 58:             // ultraFormManager1
 59:             // 
 60:             this.ultraFormManager1.Form = this;
 61:             this.ultraFormManager1.FormStyleSettings.FormDisplayStyle = Infragistics.Win.UltraWinToolbars.FormDisplayStyle.StandardWithRibbon;
 62:             this.ultraFormManager1.UseOsThemes = Infragistics.Win.DefaultableBoolean.False;
 63:             // 
 64:             // _CardView_UltraFormManager_Dock_Area_Left
 65:             // 
 66:             this._CardView_UltraFormManager_Dock_Area_Left.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
 67:             this._CardView_UltraFormManager_Dock_Area_Left.BackColor = System.Drawing.SystemColors.Control;
 68:             this._CardView_UltraFormManager_Dock_Area_Left.DockedPosition = Infragistics.Win.UltraWinForm.DockedPosition.Left;
 69:             this._CardView_UltraFormManager_Dock_Area_Left.ForeColor = System.Drawing.SystemColors.ControlText;
 70:             this._CardView_UltraFormManager_Dock_Area_Left.FormManager = this.ultraFormManager1;
 71:             this._CardView_UltraFormManager_Dock_Area_Left.InitialResizeAreaExtent = 8;
 72:             resources.ApplyResources(this._CardView_UltraFormManager_Dock_Area_Left, "_CardView_UltraFormManager_Dock_Area_Left");
 73:             this._CardView_UltraFormManager_Dock_Area_Left.Name = "_CardView_UltraFormManager_Dock_Area_Left";
 74:             // 
 75:             // _CardView_UltraFormManager_Dock_Area_Right
 76:             // 
 77:             this._CardView_UltraFormManager_Dock_Area_Right.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
 78:             this._CardView_UltraFormManager_Dock_Area_Right.BackColor = System.Drawing.SystemColors.Control;
 79:             this._CardView_UltraFormManager_Dock_Area_Right.DockedPosition = Infragistics.Win.UltraWinForm.DockedPosition.Right;
 80:             this._CardView_UltraFormManager_Dock_Area_Right.ForeColor = System.Drawing.SystemColors.ControlText;
 81:             this._CardView_UltraFormManager_Dock_Area_Right.FormManager = this.ultraFormManager1;
 82:             this._CardView_UltraFormManager_Dock_Area_Right.InitialResizeAreaExtent = 8;
 83:             resources.ApplyResources(this._CardView_UltraFormManager_Dock_Area_Right, "_CardView_UltraFormManager_Dock_Area_Right");
 84:             this._CardView_UltraFormManager_Dock_Area_Right.Name = "_CardView_UltraFormManager_Dock_Area_Right";
 85:             // 
 86:             // _CardView_UltraFormManager_Dock_Area_Top
 87:             // 
 88:             this._CardView_UltraFormManager_Dock_Area_Top.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
 89:             this._CardView_UltraFormManager_Dock_Area_Top.BackColor = System.Drawing.SystemColors.Control;
 90:             this._CardView_UltraFormManager_Dock_Area_Top.DockedPosition = Infragistics.Win.UltraWinForm.DockedPosition.Top;
 91:             this._CardView_UltraFormManager_Dock_Area_Top.ForeColor = System.Drawing.SystemColors.ControlText;
 92:             this._CardView_UltraFormManager_Dock_Area_Top.FormManager = this.ultraFormManager1;
 93:             resources.ApplyResources(this._CardView_UltraFormManager_Dock_Area_Top, "_CardView_UltraFormManager_Dock_Area_Top");
 94:             this._CardView_UltraFormManager_Dock_Area_Top.Name = "_CardView_UltraFormManager_Dock_Area_Top";
 95:             // 
 96:             // _CardView_UltraFormManager_Dock_Area_Bottom
 97:             // 
 98:             this._CardView_UltraFormManager_Dock_Area_Bottom.AccessibleRole = System.Windows.Forms.AccessibleRole.Grouping;
 99:             this._CardView_UltraFormManager_Dock_Area_Bottom.BackColor = System.Drawing.SystemColors.Control;
 100:             this._CardView_UltraFormManager_Dock_Area_Bottom.DockedPosition = Infragistics.Win.UltraWinForm.DockedPosition.Bottom;
 101:             this._CardView_UltraFormManager_Dock_Area_Bottom.ForeColor = System.Drawing.SystemColors.ControlText;
 102:             this._CardView_UltraFormManager_Dock_Area_Bottom.FormManager = this.ultraFormManager1;
 103:             this._CardView_UltraFormManager_Dock_Area_Bottom.InitialResizeAreaExtent = 8;
 104:             resources.ApplyResources(this._CardView_UltraFormManager_Dock_Area_Bottom, "_CardView_UltraFormManager_Dock_Area_Bottom");
 105:             this._CardView_UltraFormManager_Dock_Area_Bottom.Name = "_CardView_UltraFormManager_Dock_Area_Bottom";
 106:             // 
 107:             // MainPanel
 108:             // 
 109:             // 
 110:             // MainPanel.ClientArea
 111:             // 
 112:             this.MainPanel.ClientArea.Controls.Add(this.PanelCenter);
 113:             this.MainPanel.ClientArea.Controls.Add(this.SplitterRight);
 114:             this.MainPanel.ClientArea.Controls.Add(this.PanelRight);
 115:             this.MainPanel.ClientArea.Controls.Add(this.SplitterTop);
 116:             this.MainPanel.ClientArea.Controls.Add(this.PanelTop);
 117:             resources.ApplyResources(this.MainPanel, "MainPanel");
 118:             this.MainPanel.Name = "MainPanel";
 119:             // 
 120:             // PanelCenter
 121:             // 
 122:             this.PanelCenter.BorderStyle = Infragistics.Win.UIElementBorderStyle.None;
 123:             resources.ApplyResources(this.PanelCenter, "PanelCenter");
 124:             this.PanelCenter.Name = "PanelCenter";
 125:             // 
 126:             // SplitterRight
 127:             // 
 128:             this.SplitterRight.BackColor = System.Drawing.SystemColors.Control;
 129:             resources.ApplyResources(this.SplitterRight, "SplitterRight");
 130:             this.SplitterRight.Name = "SplitterRight";
 131:             this.SplitterRight.RestoreExtent = 250;
 132:             // 
 133:             // PanelRight
 134:             // 
 135:             this.PanelRight.AutoScroll = true;
 136:             this.PanelRight.BorderStyle = Infragistics.Win.UIElementBorderStyle.None;
 137:             // 
 138:             // PanelRight.ClientArea
 139:             // 
 140:             this.PanelRight.ClientArea.Controls.Add(this.btnToggleAnimation);
 141:             resources.ApplyResources(this.PanelRight, "PanelRight");
 142:             this.PanelRight.Name = "PanelRight";
 143:             // 
 144:             // btnToggleAnimation
 145:             // 
 146:             resources.ApplyResources(this.btnToggleAnimation, "btnToggleAnimation");
 147:             this.btnToggleAnimation.Name = "btnToggleAnimation";
 148:             this.btnToggleAnimation.ShowFocusRect = false;
 149:             // 
 150:             // SplitterTop
 151:             // 
 152:             this.SplitterTop.BackColor = System.Drawing.SystemColors.Control;
 153:             resources.ApplyResources(this.SplitterTop, "SplitterTop");
 154:             this.SplitterTop.Name = "SplitterTop";
 155:             this.SplitterTop.RestoreExtent = 100;
 156:             // 
 157:             // PanelTop
 158:             // 
 159:             this.PanelTop.BorderStyle = Infragistics.Win.UIElementBorderStyle.None;
 160:             // 
 161:             // PanelTop.ClientArea
 162:             // 
 163:             this.PanelTop.ClientArea.Controls.Add(this.sampleInfo);
 164:             resources.ApplyResources(this.PanelTop, "PanelTop");
 165:             this.PanelTop.Name = "PanelTop";
 166:             this.PanelTop.Tag = "Top";
 167:             // 
 168:             // sampleInfo
 169:             // 
 170:             resources.ApplyResources(this.sampleInfo, "sampleInfo");
 171:             this.sampleInfo.BackColor = System.Drawing.Color.Transparent;
 172:             this.sampleInfo.Name = "sampleInfo";
 173:             this.sampleInfo.SampleCodeCSharp = resources.GetString("sampleInfo.SampleCodeCSharp");
 174:             this.sampleInfo.SampleCodeVBasic = null;
 175:             this.sampleInfo.SampleDescription = null;
 176:             this.sampleInfo.SampleTitle = "Code Viewer";
 177:             // 
 178:             // MotionFramework
 179:             // 
 180:             resources.ApplyResources(this, "$this");
 181:             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
 182:             this.Controls.Add(this.MainPanel);
 183:             this.Controls.Add(this._CardView_UltraFormManager_Dock_Area_Left);
 184:             this.Controls.Add(this._CardView_UltraFormManager_Dock_Area_Right);
 185:             this.Controls.Add(this._CardView_UltraFormManager_Dock_Area_Top);
 186:             this.Controls.Add(this._CardView_UltraFormManager_Dock_Area_Bottom);
 187:             this.Name = "MotionFramework";
 188:             ((System.ComponentModel.ISupportInitialize)(this.ultraFormManager1)).EndInit();
 189:             this.MainPanel.ClientArea.ResumeLayout(false);
 190:             this.MainPanel.ResumeLayout(false);
 191:             this.PanelCenter.ResumeLayout(false);
 192:             this.PanelRight.ClientArea.ResumeLayout(false);
 193:             this.PanelRight.ResumeLayout(false);
 194:             this.PanelTop.ClientArea.ResumeLayout(false);
 195:             this.PanelTop.ClientArea.PerformLayout();
 196:             this.PanelTop.ResumeLayout(false);
 197:             this.ResumeLayout(false);
 198:  
 199:         }
 200:  
 201:         #endregion
 202:  
 203:         private Infragistics.Win.UltraWinForm.UltraFormManager ultraFormManager1;
 204:         private Infragistics.Win.UltraWinForm.UltraFormDockArea _CardView_UltraFormManager_Dock_Area_Left;
 205:         private Infragistics.Win.UltraWinForm.UltraFormDockArea _CardView_UltraFormManager_Dock_Area_Right;
 206:         private Infragistics.Win.UltraWinForm.UltraFormDockArea _CardView_UltraFormManager_Dock_Area_Top;
 207:         private Infragistics.Win.UltraWinForm.UltraFormDockArea _CardView_UltraFormManager_Dock_Area_Bottom;
 208:         private Infragistics.Win.Misc.UltraPanel MainPanel;
 209:         private Infragistics.Win.Misc.UltraSplitter SplitterTop;
 210:         private Infragistics.Win.Misc.UltraPanel PanelTop;
 211:         private Infragistics.Win.Misc.UltraSplitter SplitterRight;
 212:         private Infragistics.Win.Misc.UltraPanel PanelRight;
 213:         private Infragistics.Win.Misc.UltraPanel PanelCenter;
 214:         private SampleInfoControl sampleInfo;
 215:         private Win.Misc.UltraButton btnToggleAnimation;
 216:     }
 217: }

 

Summary

The UltraDataChart is a powerful charting control, enabling users to browse and interact with data in a much richer way using zooming, inter-chart synchronization and tooltips. With a variety of series types and built-in trendlines, it’s fully capable of handing your charting scenarios. Talk to users of your applications and ask them where they can benefit from browsing their data in a visual way.

The Infragistics Windows Forms Data Visualization controls also offer a wide range of options to create almost any dashboard that you need. In this post we discussed how to use Infragistics UltraDataChart , but you can see samples of how to use any of other data visualization components on the Infragistics Windows Forms Samples Browser. There, you'll find detailed information about the control and its features and how to configure its separate parts in the API documentation as well as the online help documentation.

To play around with the Infragistics Windows Forms dashboards on your own, be sure to get Infragistics Ultimate and see the chart in action in our latest sample application by clicking the banner below!