I have a problem where if I set the UltraChart.PieChart3D.ColumnIndex to a value other than -1 (the default) or to the column index of the first numeric column in my datatable, the Others wedge isn't drawn in the pie. It seems like a UltraChart bug to me.
I have a DataTable with 3 columns (String, Double, Double). By default, the pie chart uses the 1st column as the labels and charts the 2nd column. If I use the PieChart3D.ColumnIndex (or PieChart3D.SetDataColumnIndex method) to chart the 3rd column instead, the pie is drawn as if the Others wedge had 0 value.
I can work around this by swaping the 2nd and 3rd columns, but wanted to check to see if there was something simpler that I had missed.
Here's code for a form that demonstrates the problem:
public partial class Form1 : Form { private const String PIE_CHART_LABEL_MULTILINE = "<ITEM_LABEL>\n<DATA_VALUE:#,##0.00>\n<PERCENT_VALUE:#0.00>%"; private Infragistics.Win.UltraWinChart.UltraChart ultraChart1; public Form1() { this.SuspendLayout(); ultraChart1 = new Infragistics.Win.UltraWinChart.UltraChart(); ultraChart1.Dock = DockStyle.Fill; this.Controls.Add(ultraChart1); this.ResumeLayout(); this.Load += new EventHandler(Form1_Load); } private void Form1_Load(object sender, EventArgs e) { DataTable dataTable = new DataTable(); DataColumn textCol = new DataColumn("Text", typeof(String)); DataColumn numCol1 = new DataColumn("Num1", typeof(Double)); DataColumn numCol2 = new DataColumn("Num2", typeof(Double)); dataTable.Columns.AddRange(new DataColumn[ { textCol, numCol1, numCol2 }); dataTable.Rows.Add(new object[ { "A", -1, 20 }); dataTable.Rows.Add(new object[ { "B", 10, 50 }); dataTable.Rows.Add(new object[ { "C", -15, 10 }); dataTable.Rows.Add(new object[ { "D", 51, 4 }); dataTable.Rows.Add(new object[ { "E", 31, 5 }); dataTable.Rows.Add(new object[ { "F", -21, 120 }); dataTable.Rows.Add(new object[ { "G", 81, 60 }); dataTable.Rows.Add(new object[ { "H", 21, 30 }); ultraChart1.DataSource = dataTable; ultraChart1.ChartType = Infragistics.UltraChart.Shared.Styles.ChartType.PieChart3D; ultraChart1.Legend.Visible = true; ultraChart1.PieChart3D.Labels.FormatString = PIE_CHART_LABEL_MULTILINE; ultraChart1.Tooltips.FormatString = PIE_CHART_LABEL_MULTILINE; ultraChart1.PieChart3D.OthersCategoryPercent = 10.0; // Leave this at the default value of -1 or set it to 1 and the Others wedge is drawn. // // Set it to anything else and the Others wedge isn't drawn and: // - Others shows up in the legend // - Percentages in the Tooltip are correct (taking Others into account) // - Percentages in the Labels are wrong (they ignore the value of the Others) // // I've worked around it by using DataColumn.SetOrdinal() to move the column I want to // chart into the position of the first numeric column. ultraChart1.PieChart3D.ColumnIndex = 2; // ultraChart1.PieChart3D.SetDataColumnIndex(2); ultraChart1.DataBind(); } }
--yale
As a workaround, you can use chart.Data.IncludeColumn(1, false) to exclude your first numeric column. This way you still get data from the second column without having to use ColumnIndex.
Thanks for reporting this. It turned out to be a bug in the 3d pie chart, which I've just fixed. Once this is tested, the fix will be included in the next available hotfix. If you need to get an update on this bug's status, please submit an issue to the developer support group and mention bug number BR30733.