Profile Picture

Binding with Secondary Y-Axis

Posted By David Huxtable 15 Years Ago
Author
Message
David Huxtable
questionmark Posted 15 Years Ago
View Quick Profile
Junior Member

Junior Member (13 reputation)Junior Member (13 reputation)Junior Member (13 reputation)Junior Member (13 reputation)Junior Member (13 reputation)Junior Member (13 reputation)Junior Member (13 reputation)Junior Member (13 reputation)Junior Member (13 reputation)

Group: Forum Members
Last Active: 15 Years Ago
Posts: 13, Visits: 1
Good Afternoon,

I didn't notice an example in the Data Manipulation section of the examples where a chart is bound to a datatable, in which a secondary y axis is also bound to a column. Is there such an example?

If not would it be possible for somebody a post a very basic example doing so?

My main problem is allowing the secondary y axis series to use the same X values as the series with the primary x, y and possibly z axes.

I hope this made sense.

Thankyou in advance,

David.

David Huxtable
Posted 15 Years Ago
View Quick Profile
Junior Member

Junior Member (13 reputation)Junior Member (13 reputation)Junior Member (13 reputation)Junior Member (13 reputation)Junior Member (13 reputation)Junior Member (13 reputation)Junior Member (13 reputation)Junior Member (13 reputation)Junior Member (13 reputation)

Group: Forum Members
Last Active: 15 Years Ago
Posts: 13, Visits: 1
For anybody who has come up with the same issue I have worked out the solution.

It turned out to be quite simple and I cannot believe it took me so long to figure the answer.

Basically, you will have another series for the secondary y-axis, in which you must tell it use the x and possibly y values, as with the first series containing the x, y and possible z axes values and bind those x and z (if applicable) values to the second series also so they share the same x and z values in the one chart.

Below is a simple example of such:

// DataTable
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn() { DataType = typeof(double), ColumnName = "X" });
dt.Columns.Add(new DataColumn() { DataType = typeof(double), ColumnName = "Y" });
dt.Columns.Add(new DataColumn() { DataType = typeof(double), ColumnName = "Y2" });
dt.Columns.Add(new DataColumn() { DataType = typeof(double), ColumnName = "Z" });
dt.Columns.Add(new DataColumn(){DataType=typeof(double), ColumnName="ZTest"});

// Populate table with random data.
Random rand = new Random();

for (int rowIndex = 0; rowIndex < dt.Rows.Count; rowIndex++)
{
for (int columnIndex = 0; columnIndex < dt.Columns.Count; columnIndex++)
{
dt.Rows[rowIndex][columnIndex] = rand.NextDouble();
}
}

NChart chart = nChartControl1.Charts[0];

// 1st series.
NBarSeries barSeries = (NBarSeries)chart.Series.Add(SeriesType.Bar);
barSeries.UseXValues = true;
barSeries.UseZValues = true;

// 1st series binding.
NDataBindingManager dataBindingManager = nChartControl1.DataBindingManager;

// The series index to bind to is the second parameter.
dataBindingManager.AddBinding(0, 0, "XValues", dt, "X");
dataBindingManager.AddBinding(0, 0, "Values", dt, "Y");
dataBindingManager.AddBinding(0, 0, "ZValues", dt, "Z");

2nd series.
NLineSeries lineSeries = (NLineSeries)chart.Series.Add(SeriesType.Line);
lineSeries.UseXValues = true;
lineSeries.UseZValues = true;

// Declare a secondary y axis and dock it to the right of the chart.
NAxis secondaryY = (NAxis)chart.Axis(StandardAxis.SecondaryY);
secondaryY.Anchor = new NDockAxisAnchor(AxisDockZone.FrontRight);
secondaryY.Visible = true;

// 2nd series binding, notice the series index (parameter 2).
dataBindingManager.AddBinding(0, 1, "XValues", dt, "X");
dataBindingManager.AddBinding(0, 1, "Values", dt, "Y2");
dataBindingManager.AddBinding(0, 1, "ZValues", dt, "Z");

// Create a scale configurator and set it to the secondary y axis.
NLinearScaleConfigurator secYConfig = (NLinearScaleConfigurator)secondaryY.ScaleConfigurator;
// Optinally you can configure some styling.
secYConfig.RulerStyle.FillStyle = new NColorFillStyle(System.Drawing.Color.DarkRed);
secYConfig.RulerStyle.BorderStyle.Color = System.Drawing.Color.Red;
secYConfig.InnerMajorTickStyle.LineStyle.Color = System.Drawing.Color.Red;
secYConfig.OuterMajorTickStyle.LineStyle.Color = System.Drawing.Color.Red;
secYConfig.InnerMajorTickStyle.Length = new NLength(0);
secYConfig.MajorGridStyle.ShowAtWalls = new ChartWallType[] { ChartWallType.Back, ChartWallType.Left };
secYConfig.LabelStyle.TextStyle.FillStyle = new NColorFillStyle(System.Drawing.Color.DarkRed);

// Display on standard secondary y axis, ensuring not on primary y axis.
secYConfig.DisplayOnAxis(StandardAxis.PrimaryY, false);
secYConfig.DisplayOnAxis(StandardAxis.SecondaryY, true);

In the case I have missed something, this quick example should hopefully guide you to binding a chart containing a secondary y axis to a datatable and allow it to share the x and z values.

David



Similar Topics


Reading This Topic