To reproduce: LegendItem item = new LegendItem(); item.Element.BorderColor = Color.Black; item.Element.BackColor = Color.Yellow; item.Title = "Custom item"; this.radChartView1.ChartElement.LegendElement.Items.Add(item); Workaround: class MyLegendItem : LegendItem { string title = ""; protected override void SetLegendTitle(string title) { base.SetLegendTitle(title); if (this.Element is LegendItemStyleElement) { this.title = title; } } protected override string GetLegendTitle() { if (this.Element is LegendItemStyleElement) { return title; } return base.GetLegendTitle(); } }
To reproduce: - Localize the palette names with the localization provider. - Change the palette with the context menu. Workaround: class MyChartDataPointElementController : ChartDataPointElementController { protected override RadContextMenu CreatePaletteMenu() { RadContextMenu menu = new RadContextMenu(); RadChartLocalizationProvider localizationProvider = RadChartLocalizationProvider.CurrentProvider; RadMenuItem paletteItem = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.Palette)); menu.Items.Add(paletteItem); RadMenuItem item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteArctic)); item.Click += new System.EventHandler(item_Click); item.Tag = "Arctic"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteAutumn)); item.Click += new System.EventHandler(item_Click); item.Tag = "Autumn"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteCold)); item.Click += new System.EventHandler(item_Click); item.Tag = "Gold"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteFlower)); item.Click += new System.EventHandler(item_Click); item.Tag = "Flower"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteForest)); item.Click += new System.EventHandler(item_Click); item.Tag = "Forest"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteGrayscale)); item.Click += new System.EventHandler(item_Click); item.Tag = "Grayscale"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteGround)); item.Click += new System.EventHandler(item_Click); item.Tag = "Ground"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteLilac)); item.Click += new System.EventHandler(item_Click); item.Tag = "Lilac"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteMetro)); item.Click += new System.EventHandler(item_Click); item.Tag = "Metro"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteNatural)); item.Click += new System.EventHandler(item_Click); item.Tag = "Natural"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PalettePastel)); item.Click += new System.EventHandler(item_Click); item.Tag = "Pastel"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteRainbow)); item.Click += new System.EventHandler(item_Click); item.Tag = "Rainbow"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteSpring)); item.Click += new System.EventHandler(item_Click); item.Tag = "Spring"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteSummer)); item.Click += new System.EventHandler(item_Click); item.Tag = "Summer"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteWarm)); item.Click += new System.EventHandler(item_Click); item.Tag = "Warm"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteWindows8)); item.Click += new System.EventHandler(item_Click); item.Tag = "Windows8"; paletteItem.Items.Add(item); item = new RadMenuItem(localizationProvider.GetLocalizedString(RadChartStringId.PaletteSun)); item.Click += new System.EventHandler(item_Click); item.Tag = "Sun"; paletteItem.Items.Add(item); return menu; } void item_Click(object sender, System.EventArgs e) { RadMenuItem item = sender as RadMenuItem; if (item != null) { this.Area.View.Palette = ChartPalette.FromKnownPalette(item.Tag.ToString()); } } } // change the controller this.radChartView1.Controllers.Add(new MyChartDataPointElementController());
To reproduce: - Use the attached file to reproduce. Workaround: - Reset the chart data source: THIS-OBJECT:radChartView1:DataSource = ?. THIS-OBJECT:radChartView1:DataSource = THIS-OBJECT:bindingSource1.
To reproduce: BarSeries barSeries = new BarSeries("Performance", "RepresentativeName"); barSeries.Name = "Q1"; barSeries.CombineMode = ChartSeriesCombineMode.Stack; barSeries.DataPoints.Add(new CategoricalDataPoint(177, "Harley")); barSeries.DataPoints.Add(new CategoricalDataPoint(128, "White")); barSeries.DataPoints.Add(new CategoricalDataPoint(143, "Smith")); barSeries.DataPoints.Add(new CategoricalDataPoint(111, "Jones")); barSeries.DataPoints.Add(new CategoricalDataPoint(118, "Marshall")); this.radChartView1.Series.Add(barSeries); BarSeries barSeries2 = new BarSeries("Performance", "RepresentativeName"); barSeries2.Name = "Q2"; barSeries2.CombineMode = ChartSeriesCombineMode.Stack; barSeries2.DataPoints.Add(new CategoricalDataPoint(153, "Harley")); barSeries2.DataPoints.Add(new CategoricalDataPoint(141, "White")); barSeries2.DataPoints.Add(new CategoricalDataPoint(130, "Smith")); barSeries2.DataPoints.Add(new CategoricalDataPoint(88, "Jones")); barSeries2.DataPoints.Add(new CategoricalDataPoint(109, "Marshall")); this.radChartView1.Series.Add(barSeries2); BarSeries barSeries3 = new BarSeries("Performance", "RepresentativeName"); barSeries3.Name = "Q3"; barSeries3.CombineMode = ChartSeriesCombineMode.Stack; barSeries3.DataPoints.Add(new CategoricalDataPoint(153, "Harley")); barSeries3.DataPoints.Add(new CategoricalDataPoint(141, "White")); barSeries3.DataPoints.Add(new CategoricalDataPoint(130, "Smith")); barSeries3.DataPoints.Add(new CategoricalDataPoint(88, "Jones")); barSeries3.DataPoints.Add(new CategoricalDataPoint(109, "Marshall")); this.radChartView1.Series.Add(barSeries3); this.radChartView1.ShowTrackBall = true; Note: the trackball labels should be displayed in the order the series are displayed in the chart view. Workaround: private void ChartTrackballController_TextNeeded(object sender, TextNeededEventArgs e) { string pattern = " \\d+.?\\d* "; StringBuilder sb = new StringBuilder("<html>"); List<DataPointInfo> points = new List<DataPointInfo>(); foreach (DataPointInfo dp in e.Points) { points.Add(dp); } points.Reverse(); foreach (DataPointInfo dp in points) { Color pointColor = this.GetColorForDataPoint(dp.Series, dp.DataPoint); string color = string.Format("{0},{1},{2},{3}", pointColor.A, pointColor.R, pointColor.G, pointColor.B); sb.AppendFormat("<color={0}>{1}", color, string.Format("{0} {1}", dp.Series.Name, ((CategoricalDataPoint)dp.DataPoint).Value)); sb.AppendLine(); } e.Text = sb.ToString(); } protected virtual Color GetColorForDataPoint(ChartSeries series, DataPoint point) { if (series is IndicatorBase) { return series.BorderColor; } foreach (UIChartElement element in series.Children) { DataPointElement pointElement = element as DataPointElement; if (pointElement != null) { if (pointElement.DataPoint.Equals(point)) { if (pointElement.BackColor.A > 0) { return pointElement.BackColor; } else { return pointElement.BorderColor; } } } } return Color.Black; }
Workaround: use the ChartTrackerballController.TextNeeded event.
To reproduce: - Implement the drill down functionality with a PieSeries. - Workaround: class MyPieSeries : PieSeries, ILegendInfoProvider { public LegendItemCollection LegendInfos { get { return new LegendItemCollection(); } } }
To reproduce: - Show the legend and the add remove series at runtime. - The legend items must not have text.
To reproduce: - Add three line series and only set their point size. - At runtime remove the second series. - The points color is not updated corectly. Workaround - Set colors in code like this: lineSerie1.BorderColor = Color.Red; lineSerie1.BackColor = Color.Red; lineSerie2.BackColor = Color.Green; lineSerie2.BorderColor = Color.Green; lineSerie3.BackColor = Color.Blue; lineSerie3.BorderColor = Color.Blue;
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); } } }