To reproduce: 1. Add RadChartView with drill down and two RadCheckBox on the form 2. Subscribe to the ToggleStateChanged event of RadCheckBox and set the IsVisible property to true/false 3. In handler of DrillDown event set the series`s IsVisible property to be equal to checkbox`s Checked property 4. In few cases the series are not visible when changing the IsVisible property and view. Unfortunately due to the nature of the issue we cannot provide a workaround for it.
To reproduce: - Subscribe to the SelectedPointChanged event and show a dialog in it. - Start the chart and zoom in. Select a point, close the dialog and select a point again. Workaround: class MyChartSelectionController : ChartSelectionController { protected override ActionResult OnMouseDown(MouseEventArgs e) { //return base.OnMouseDown(e); return Controller.Empty; } protected override ActionResult OnMouseUp(MouseEventArgs e) { if (!this.AllowSelect || this.SelectionMode == ChartSelectionMode.None) { return base.OnMouseUp(e); } DataPoint oldDataPoint = SelectedPoint; DataPoint newDataPoint = null; ChartSeries oldSeries = SelectedSeries; ChartSeries newSeries = null; DataPoint point = null; foreach (ChartSeries series in this.Area.Series) { point = series.HitTest(e.X, e.Y); if (point != null) { newDataPoint = point; newSeries = series; break; } } if (point == null) { return base.OnMouseUp(e); } ChartViewSelectedPointChangingEventArgs cancelArgs = new ChartViewSelectedPointChangingEventArgs(oldDataPoint, newDataPoint, oldSeries, newSeries, this.SelectionMode); OnSelectedPointChanging(cancelArgs); if (cancelArgs.Cancel == true) { return base.OnMouseUp(e); } if (oldDataPoint == newDataPoint) { oldDataPoint.IsSelected = !oldDataPoint.IsSelected; newDataPoint = null; SelectedPoint = null; } else { if (this.SelectionMode == ChartSelectionMode.SingleDataPoint && oldDataPoint != null) { oldDataPoint.IsSelected = false; } this.SelectedPoint = newDataPoint; this.SelectedPoint.IsSelected = !SelectedPoint.IsSelected; } ChartViewSelectedPointChangedEventArgs changedArgs = new ChartViewSelectedPointChangedEventArgs(oldDataPoint, newDataPoint, oldSeries, newSeries, this.SelectionMode); OnSelectedPointChanged(changedArgs); return base.OnMouseUp(e); } }
To reproduce: - Add a pie chart using the property builder and set the palette as well. Workaround - Set the palette in code: this.radChartView1.Area.View.Palette = KnownPalette.Metro;
To reproduce: this.radChartView1.AreaType = ChartAreaType.Pie; PieSeries series = new PieSeries(); series.DataPoints.Add(new PieDataPoint(50, "Germany")); series.DataPoints.Add(new PieDataPoint(70, "United States")); series.DataPoints.Add(new PieDataPoint(40, "France")); for (int i = 0; i < 50; i++) { series.DataPoints.Add(new PieDataPoint(1, "Item " + i)); } series.ShowLabels = true; series.DrawLinesToLabels = true; this.radChartView1.Series.Add(series); this.radChartView1.ShowSmartLabels = true;
To reproduce: public RadForm1() { InitializeComponent(); LineSeries lineSeries = new LineSeries(); lineSeries.DataPoints.Add(new CategoricalDataPoint(40, "Jan")); lineSeries.DataPoints.Add(new CategoricalDataPoint(22, "Apr")); lineSeries.DataPoints.Add(new CategoricalDataPoint(12, "Jul")); lineSeries.DataPoints.Add(new CategoricalDataPoint(19, "Oct")); lineSeries.ShowLabels = true; this.radChartView1.Series.Add(lineSeries); LineSeries lineSeries2 = new LineSeries(); lineSeries2.DataPoints.Add(new CategoricalDataPoint(13, "Jan")); lineSeries2.DataPoints.Add(new CategoricalDataPoint(15, "Apr")); lineSeries2.DataPoints.Add(new CategoricalDataPoint(17, "Jul")); lineSeries2.DataPoints.Add(new CategoricalDataPoint(22, "Oct")); lineSeries2.ShowLabels = true; this.radChartView1.Series.Add(lineSeries2); ((CartesianArea)this.radChartView1.View.Area).ShowGrid = true; int i = 1; foreach (DataPointElement dpe in this.radChartView1.Series[0].Children) { dpe.IsVisible = false; AnimatedPropertySetting setting = new AnimatedPropertySetting(); setting.StartValue = false; setting.EndValue = true; setting.Property = UIChartElement.IsVisibleProperty; setting.ApplyDelay = 40 + 40 * i; setting.NumFrames = 2; setting.ApplyValue(dpe); i++; }i = 1; foreach (DataPointElement dpe in this.radChartView1.Series[1].Children) { dpe.IsVisible = false; AnimatedPropertySetting setting = new AnimatedPropertySetting(); setting.StartValue = false; setting.EndValue = true; setting.Property = UIChartElement.IsVisibleProperty; setting.ApplyDelay = 60 + 60 * i; setting.NumFrames = 2; setting.ApplyValue(dpe); i++; } } Workaround: Perform the animation in the Shown event.
To reproduce: public Form1() { InitializeComponent(); Random rand = new Random(); for (int i = 0; i < 3; i++) { LineSeries lineSeries = new LineSeries(); lineSeries.DataPoints.Add(new CategoricalDataPoint(rand.Next(-50, 50), "Jan")); lineSeries.DataPoints.Add(new CategoricalDataPoint(rand.Next(-50, 50), "Apr")); lineSeries.DataPoints.Add(new CategoricalDataPoint(rand.Next(-50, 50), "Jul")); lineSeries.DataPoints.Add(new CategoricalDataPoint(rand.Next(-50, 50), "Oct")); this.radChartView1.Series.Add(lineSeries); } this.radChartView1.ShowLegend = true; this.radChartView1.ChartElement.LegendPosition = LegendPosition.Bottom; ((LineSeries)this.radChartView1.Series[0]).LegendTitle = "S&P 500"; ((LineSeries)this.radChartView1.Series[1]).LegendTitle = "MSCI Emerging Markets TR Index"; ((LineSeries)this.radChartView1.Series[2]).LegendTitle = "Great ETF"; } Workaround: Font f = new Font("Times New Roman", 10f, FontStyle.Regular); private void Form1_Load(object sender, EventArgs e) { foreach (LegendItemElement item in this.radChartView1.ChartElement.LegendElement.StackElement.Children) { item.Font = f; } }
To reproduce: public Form1() { InitializeComponent(); this.radChartView1.AreaType = ChartAreaType.Polar; Random rand = new Random(); for (int i = 0; i < 80; i++) { RadarLineSeries s = new RadarLineSeries(); s.ShowLabels = true; for (int j = 0; j < 8; j++) { s.DataPoints.Add(new CategoricalDataPoint(rand.Next(1, 100), "X" + j)); } this.radChartView1.Series.Add(s); } this.radChartView1.ShowSmartLabels = true; }
To reproduce: LineSeries dailySeries = new LineSeries(); dailySeries.BorderColor = Color.DarkBlue; dailySeries.BorderWidth = 1; dailySeries.PointSize = new SizeF(5, 5); dailySeries.ShowLabels = true; for (int i = 0; i < 100; i++) { dailySeries.DataPoints.Add(new CategoricalDataPoint(rnd.Next(100), DateTime.Now.AddMonths(i)) { Label = "old" }); } DateTimeCategoricalAxis categoricalAxis = new DateTimeCategoricalAxis(); categoricalAxis.DateTimeComponent = DateTimeComponent.Date; categoricalAxis.MajorTickInterval = 10; categoricalAxis.PlotMode = AxisPlotMode.OnTicks; categoricalAxis.LabelFormat = "{0:MMM-yy}"; categoricalAxis.ClipLabels = false; categoricalAxis.LastLabelVisibility = AxisLastLabelVisibility.Visible; CartesianArea area = this.radChart.GetArea<CartesianArea>(); area.ShowGrid = true; CartesianGrid grid = area.GetGrid<CartesianGrid>(); grid.DrawHorizontalFills = true; grid.BorderDashStyle = System.Drawing.Drawing2D.DashStyle.DashDot; //First assign the axis to the VerticalAxis property and then add the series to the chart dailySeries.HorizontalAxis = categoricalAxis; this.radChart.Series.Add(dailySeries); Workaround: Use different value for the MajorTickInterval.
When trying to drill down PieChart on RadChartView the code throws exception. Workaround: private void radChartView_Drill(object sender, DrillEventArgs e){ e.View.Parent = this.radChartViewUsers.ChartElement.Wrapper; e.View.AreaType = ChartAreaType.Pie; //do drill logic}
To reproduce: public RadForm1() { InitializeComponent(); this.radChartView1.AreaType = ChartAreaType.Pie; PieSeries series = new PieSeries(); series.DataPoints.Add(new PieDataPoint(50, "Germany")); series.DataPoints.Add(new PieDataPoint(70, "United States")); series.DataPoints.Add(new PieDataPoint(40, "France")); series.DataPoints.Add(new PieDataPoint(25, "United Kingdom")); series.ShowLabels = true; this.radChartView1.Series.Add(series); radChartView1.ShowLegend = true; } Random rnd = new Random(); private void radButton1_Click(object sender, EventArgs e) { this.radChartView1.Series[0].DataPoints.RemoveAt(0); this.radChartView1.Series[0].DataPoints.Add(new PieDataPoint(rnd.Next(100), rnd.Next(100).ToString())); } Workaround: private void radButton1_Click(object sender, EventArgs e) { this.radChartView1.Series[0].DataPoints.RemoveAt(0); this.radChartView1.Series[0].DataPoints.Add(new PieDataPoint(50, rnd.Next(100).ToString())); this.radChartView1.ChartElement.LegendElement.Items.Clear(); foreach (PieSeries series in radChartView1.Series) { for (int i = 0; i < series.DataPoints.Count; i++) { var dataPoint = series.DataPoints[i] as PieDataPoint; var element = series.Children[i] as PiePointElement; var legendItem = new LegendItem(element); legendItem.Title = dataPoint.LegendTitle; this.radChartView1.ChartElement.LegendElement.Items.Add(legendItem); } } }
To reproduce: this.radChartView1.AreaType = Telerik.WinControls.UI.ChartAreaType.Polar; RadarLineSeries series = new RadarLineSeries(new SizeF(8f, 8f)); series.DataPoints.Add(new CategoricalDataPoint(0.0, "Coding")); series.LegendTitle = String.Format("Coding"); series.BorderWidth = 2; radChartView1.Series.Add(series); series.PolarAxis.Minimum = 0d; series.PolarAxis.Maximum = 0.0; series.PolarAxis.TickLength = 4;
Workaround: public Form1() { InitializeComponent(); StringFormat.GenericTypographic.Alignment = StringAlignment.Near; }
Workaround: create a custom BarSeriesDrawPart and override the Draw method public class CustomBarSeriesDrawPart : BarSeriesDrawPart { public CustomBarSeriesDrawPart(BarSeries series, IChartRenderer renderer) : base(series, renderer) { } public override void Draw() { bool shouldDraw = IsElementValid(); if (shouldDraw) { Graphics graphics = this.Renderer.Surface as Graphics; GraphicsState state = graphics.Save(); Region clipRegion = graphics.Clip; CartesianSeries cartesianSeries = this.Element as CartesianSeries; if (cartesianSeries != null) { FieldInfo fi = cartesianSeries.GetType().GetField("area", BindingFlags.NonPublic | BindingFlags.Instance); CartesianArea area = fi.GetValue(cartesianSeries) as CartesianArea; MethodInfo mi = area.GetType().GetMethod("GetCartesianClipRect", BindingFlags.NonPublic | BindingFlags.Instance); mi.Invoke(area, null); RectangleF clipRect = (RectangleF)mi.Invoke(area, null); graphics.Clip = new Region(clipRect); } DrawSeriesParts(); graphics.Clip = clipRegion; graphics.Restore(state); } } }
RadChartView Control: corrupts legend when set Series IsVisibleInLegend = False in Properties at design time Simply added a few extra series , and then tried to turn them off in the legend screen shot shows too many legent items for the series in the properties window
How to reproduce: public Form1() { InitializeComponent(); DataTable source = new DataTable(); source.Columns.Add("PreviousGoal", typeof(decimal)); source.Columns.Add("CurrentCategory", typeof(System.DateTime)); source.LoadDataRow(new object[] { null, "6/1/15" }, true); source.LoadDataRow(new object[] { null, "6/2/15" }, true); source.LoadDataRow(new object[] { null, "6/3/15" }, true); source.LoadDataRow(new object[] { null, "6/4/15" }, true); source.LoadDataRow(new object[] { null, "6/5/15" }, true); this.radChartView1.DataSource = source; SteplineSeries previousGoalSeries = new SteplineSeries(); previousGoalSeries.DataSource = source; previousGoalSeries.ValueMember = "PreviousGoal"; this.radChartView1.Series.Add(previousGoalSeries); SteplineSeries previousGoalSeries1 = new SteplineSeries(); previousGoalSeries1.DataSource = source; previousGoalSeries1.ValueMember = "CurrentCategory"; this.radChartView1.Series.Add(previousGoalSeries1); this.radChartView1.ShowTrackBall = true; } Workaround: add the series with null values last public partial class Form1 : Form { public Form1() { InitializeComponent(); DataTable source = new DataTable(); source.Columns.Add("PreviousGoal", typeof(decimal)); source.Columns.Add("CurrentCategory", typeof(System.DateTime)); source.LoadDataRow(new object[] { null, "6/1/15" }, true); source.LoadDataRow(new object[] { null, "6/2/15" }, true); source.LoadDataRow(new object[] { null, "6/3/15" }, true); source.LoadDataRow(new object[] { null, "6/4/15" }, true); source.LoadDataRow(new object[] { null, "6/5/15" }, true); this.radChartView1.DataSource = source; SteplineSeries previousGoalSeries1 = new SteplineSeries(); previousGoalSeries1.DataSource = source; previousGoalSeries1.ValueMember = "CurrentCategory"; this.radChartView1.Series.Add(previousGoalSeries1); SteplineSeries previousGoalSeries = new SteplineSeries(); previousGoalSeries.DataSource = source; previousGoalSeries.ValueMember = "PreviousGoal"; this.radChartView1.Series.Add(previousGoalSeries); this.radChartView1.ShowTrackBall = true; } }
Having issues withVS2013 & 2015 Q1 Winforms RadChartView control 1. WYSIWYG in design time does not refresh properly after changing axis collection parameters, unless close and reopen the parent winform or custom control 2. by changing an axis collection parameter , seem to end up with multiple extra axes series (originally had axisX, AxisY, and after a minor param change ended up with axis 0 thru 5 (6 in total) and all series where now using axis4 & axis5 not my original axis? 3. I can't see to toggle display on/off of series in winforms via the legend, yet in wpf web it is possible? will this feature be added later? attached is example of WYSIWYG not working improvement Suggestions: I would love to have a major and minor grid (similar to ref: http://thumbs.dreamstime.com/z/screen-digital-oscilloscope-two-types-signal-33269502.jpg) as most of my work is measurement and scientific in nature. I would like to ensure the ratio of X-Y is fixed so that on resize of the control the grid does not skew or stretch and I loose 1:1 aspect ratio I look forward to your feedback ;)
How to reproduce: public partial class Form1 : Form { public Form1() { InitializeComponent(); this.radChartView1.AreaType = ChartAreaType.Pie; PieSeries series = new PieSeries(); series.DataPoints.Add(new PieDataPoint(0, "Germany")); series.DataPoints.Add(new PieDataPoint(0, "United States")); series.DataPoints.Add(new PieDataPoint(0, "France")); series.DataPoints.Add(new PieDataPoint(0, "United Kingdom")); series.ShowLabels = true; this.radChartView1.Series.Add(series); this.radChartView1.ShowSmartLabels = true; } } Workaround: this.radChartView1.ShowSmartLabels = false;