I have created a RangeBar MS Chart control that binds with a datatable. This datatable is created based on the below list data.
The problem is that x axis is showing multiple points for same item with different range.
List
MS Chart
X axis represents the 1st column of the list and Y axis values are 3rd and 4th columns. "dt" is the datatable name
Code
chChart.Series["Series1"].ChartType = SeriesChartType.RangeBar;
chChart.Series["Series1"].Points.DataBind(dt.DefaultView, "Number", "Start Time,Stop Time","ToolTip=Name,Label=Name");
Tried binding as different series but still not working.
var IETable = (dt as System.ComponentModel.IListSource).GetList();
chChart.DataBindCrossTable(IETable, "Number", "Number", "Start Time,Stop Time","");
foreach (Series sr in chChart.Series)
{
sr.ChartType = SeriesChartType.RangeBar;
sr.YValueType = ChartValueType.Time;
sr.XValueType = ChartValueType.String;
}
Is there a way to group x axis value for same item so that the bars are in same line?
Note - When using custom labels, only one value is shown for each x axis label.
Add 1 Series
into the chart. Then for the Series, make sure YValuesPerPoint = 2
.
Add new DataPoints
so that the XValue
represents the line (in the example for line ABC1, XValue = 1
and line ABC2, XValue = 2
. For the DataPoint.AxisLabel
you can set the label of that axis (in this case 'ABC1' and 'ABC2'). Then for the YValues
, you specify values comma separated, for example 1,2
or 7,20
.
Example:
chChart.Series["Series1"].Points.Add(new DataPoint() { AxisLabel = "ABC1", XValue = 1, YValues = new double[] { 2,5 } });
chChart.Series["Series1"].Points.Add(new DataPoint() { AxisLabel = "ABC1", XValue = 1, YValues = new double[] { 6,7 } });
chChart.Series["Series1"].Points.Add(new DataPoint() { AxisLabel = "ABC1", XValue = 1, YValues = new double[] { 9,10 } });
chChart.Series["Series1"].Points.Add(new DataPoint() { AxisLabel = "ABC2", XValue = 2, YValues = new double[] { 3,6 } });
chChart.Series["Series1"].Points.Add(new DataPoint() { AxisLabel = "ABC2", XValue = 2, YValues = new double[] { 7,8 } });
So the key is that the XValue
must be same (double?) for all the bars on same line.