Log in to like this post! 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!