我试图创建一组图表系列,向系列添加数据,然后通过使它们可见来显示一些系列。数据发生变化,用户可以选择要查看的系列。我认为这种方法比使用chart.Series.Clear();
清除所有系列更好,然后以相同的方法重新创建系列。
例如,具有随机里程的拼车中的汽车列表,然后选择要显示的汽车。
下面的代码不起作用(我已经评论过哪里)。该系列不公开,我认为需要将它们添加到像SeriesCollection
这样的公共收藏中,但我不确定如何。
感谢您的帮助。
// create new chart series and add to a chartarea
ChartArea TestChartArea = new ChartArea();
public void CreateChartSeries()
{
List<string> lstCars = new List<string> { "Mazda", "Tesla", "Honda", "Jaguar", "Ford", "Toyota" };
foreach (string Car in lstCars)
{
// car series created correctly?
var Srs = new Series(Car);
Srs.ChartArea = TestChart.Name;
Srs.YAxisType = AxisType.Primary;
Srs.Color = Color.Red;
Srs.ChartType = SeriesChartType.Line;
TestChart.Series.Add(Srs);
}
}
// add data to chart series
public void SeriesData()
{
List<string> lstCars = new List<string> { "Mazda", "Tesla", "Honda", "Jaguar", "Ford", "Toyota" };
int[] Xseries = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int[] Milage = new int[10];
Random Random = new Random();
foreach (string Car in lstCars)
{
for (int M = 0; M < 10; M++)
Milage[M] = Random.Next(150, 15000);
// not sure how to call and add data to each series
Srs.Points.DataBindXY(Xseries, Milage);
}
}
// plot series - some visible
public void PlotCreatedSeries()
{
// not sure how to refer to each series
Mazda.Enabled = true;
Tesla.Enabled = false;
Honda.Enabled = true;
Jaguar.Enabled = false;
Ford.Enabled = true;
Toyota.Enabled = false;
}
答案 0 :(得分:1)
用于创建'Srs'
的名称Series
仅在范围内,即在循环内可用。在循环结束时,您会将新创建的Series
添加到Chart
:
TestChart.Series.Add(Srs);
Series
属性 是公开SeriesCollection
。这有点令人困惑,因为单数类型名称和复数属性名称在这种情况下是相同的,例如,与Legend(s)
或{相反{1}} ..
从现在开始,您可以通过索引访问它。
ChartArea(s)
..或更可读,更稳定,由 Series s = TestChart.Series[0] // the series you have added first
属性:
Name
请注意,&#39; name&#39; 也是一个棘手的词:
当您声明变量时,您会给它一个名称&#39;。 Series s = TestChart.Series["Mazda"] // the same series
TestChart.Series["Mazda"].Enabled = true;
但是许多对象也有一个名为Series s = new Series();
的属性:Name
前者必须是唯一的,但后者只是一个字符串;确保它也是独一无二的,但系统不会保护你。
前者永远不会改变,但是,如你所见,可能超出范围;后者只是一个字符串,你可以改变它。
请注意,只要变量本身仍在某处引用,变量本身就不会离开scop,这里是s.Name = "Volvo";
的一个元素..
是否要直接添加SeriesiesCollection Series
绑定或取决于您。
对于前者,有many binding个选项。
对于后者,您可以使用Chart.Points
methods ..:
DataPoints
Add(DataPoint)
AddY(YValue)
请注意,有时候,特别是对于实时图表,使用AddXY(XValues, YValue(s))
方法之一插入 DataPoint
是有意义的!
请在MSDN中查找!如果x值是非数字的或者没有实际意义,例如名称,那么中间版本才有意义。 - 请注意,将有意义的x值添加为数字(或{ {1}})对于将其用于更多目标至关重要,例如工具提示,缩放或显示范围等。
不这样做可能是新手们最常犯的错误。 InsertXXX
看起来不错,但内部数据已损坏,读取丢失。