ASP.NET StackedColumn chart - axis issue
I am creating an Asp.net Stacked Column chart.
This is how it looks:
This is how it should look:
Ignore the numbers in the chart, but look at the X-axis - why is it giving me 1148,1153, 1163 when they don't show up in the data.
Here are my details:
Here is the code:
Dim chart As New Chart
chart.ID = "Chart1"
Dim chartareas As New ChartArea
chart.ChartAreas.Add(chartareas)
chart.DataBindCrossTable(DtFinalRecords.DefaultView, "OutcomeScore", "TermID", "RecordsPerGroup", "Label=RecordsPerGroup")
chart.ChartAreas(0).AxisX.MajorGrid.Enabled = False
chart.ChartAreas(0).AxisY.MajorGrid.Enabled = False
For Each cs As Series In chart.Series
cs.ChartType = SeriesChartType.StackedColumn
Next
pnlcharts.Controls.Add(chart)
Any help would be greatly appreciated. Thank!
+3
source to share
1 answer
DataBindCrossTable
does the best job it can do with the minimum coding effort required of you. But if you are not satisfied with the default behavior, you must explicitly configure it. In your specific case, you want to assign custom labels to your data points:
protected void Page_Load(object sender, EventArgs e)
{
Chart1.Palette = ChartColorPalette.None;
Chart1.PaletteCustomColors = new Color[] { ColorTranslator.FromHtml("#DF5B59"), ColorTranslator.FromHtml("#E0D773 "), ColorTranslator.FromHtml("#8AAC53"), ColorTranslator.FromHtml("#6A843F") };
Chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = false;
Chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
Chart1.ChartAreas[0].AxisX.Interval = 1;
var rows = from row in dt.AsEnumerable() select row.Field<int>("OutcomeScore");
Chart1.Series.Clear();
foreach (int i in rows.Distinct())
Chart1.Series.Add(new Series { Name = i.ToString(), ChartType = SeriesChartType.StackedColumn });
foreach (DataRow dr in dt.Rows)
{
DataPoint dp = new DataPoint();
dp.AxisLabel = dr["TermID"].ToString();
dp.Label = dr["RecordsPerGroup"].ToString();
dp.XValue = (int)dr["TermID"];
dp.YValues[0] = (int)dr["RecordsPerGroup"];
string name = dr["OutcomeScore"].ToString();
Chart1.Series[name].Points.Add(dp);
}
}
+1
source to share