2014-03-05 57 views
0

我试图在WinForm上的FastLine类型MS图表的图例中显示最新的系列值。图表中最多可以有10个系列。我使用下面的代码在图例中添加3列(符号,系列名称,值):在MS Chart图例中显示值

 // Add Color column 
     LegendCellColumn firstColumn = new LegendCellColumn(); 
     firstColumn.ColumnType = LegendCellColumnType.SeriesSymbol; 
     firstColumn.HeaderBackColor = System.Drawing.Color.WhiteSmoke; 
     chart1.Legends[0].CellColumns.Add(firstColumn); 

     // Add Legend Text column 
     LegendCellColumn secondColumn = new LegendCellColumn(); 
     secondColumn.ColumnType = LegendCellColumnType.Text; 
     secondColumn.Text = "#LEGENDTEXT"; 
     secondColumn.HeaderBackColor = System.Drawing.Color.WhiteSmoke; 
     chart1.Legends[0].CellColumns.Add(secondColumn); 

     // Add Total cell column 
     // I will set text for this column at runtime. 
     LegendCellColumn total = new LegendCellColumn(); 
     total.Name = "Value"; 
     total.HeaderBackColor = System.Drawing.Color.WhiteSmoke; 
     chart1.Legends[0].CellColumns.Add(total); 

我的问题是 - 如何访问的传说一系列特定显示运行值?在为系列添加新的点时,如果我做了类似的操作 -

// Add new point to this series here 
    ...... 
    ...... 
    _chart.Legends[0].CellColumns[2].Text = runtimeValue.ToString(); 

然后,将为所有系列显示相同的值。该值是该系列之一的最新值。它看起来像 -

---- Series1 45.21  
---- Series2 45.21  
---- Series3 45.21  
---- Series4 45.21 

如何访问一个传奇的每个系列,这样我可以设置单独的值,显示类似 -

---- Series1 45.21 
---- Series2 100 
---- Series3 1.123 
---- Series4 250.145 

这里就这样,我已经看到,some职位已经提到,他们可以通过一系列诸如访问图例项 -

myChartName.Legends["mySeriesName"] 

我得到一个无效的参数异常,如果我尝试这样做,这意味着我无法通过一系列名称访问的传说。我在这里错过了什么吗?

感谢您提供的任何帮助。

回答

0

我终于设法得到我所期待的。 Junaith指出使用CustomItem是实现这一目标的关键。这是我最终的解决方案:

在创造了一系列的时间:

LegendItem newItem = new LegendItem(); 
newItem.ImageStyle = LegendImageStyle.Line; 
newItem.Color = lineColor; 
newItem.BorderWidth = 2; 
newItem.Cells.Add(LegendCellType.SeriesSymbol, "", ContentAlignment.MiddleLeft); // Symbol 
newItem.Cells.Add(LegendCellType.Text, seriesName, ContentAlignment.MiddleLeft); // Series Name 
newItem.Cells.Add(LegendCellType.Text, "", ContentAlignment.MiddleLeft); // Value 
... 
... 
series.IsVisibleInLegend = false; 
_chart.Series.Add(series); 

在加入实时XY值的时间:

_chart.Legends[0].CustomItems[seriesIndex].Cells[2].Text = YValue.ToString("00.00"); 

这给了我的观点我想要:

---- Series1 45.21 
---- Series2 100 
---- Series3 1.123 
---- Series4 250.145 

如果您在运行时删除您的任何系列,请确保删除相应的自定义物品使用:

_chart.Legends[0].CustomItems.RemoveAt(i); 
1

在已链接的文章中,图例名称和系列名称相同。这就是OP使用系列名称访问图例的原因。通过OP检查第二个答案中的下面一行。

chartSel.Legends.Add(ySeries.Name); 

要从系列访问传说列,

string legendName = chart1.Series[SeriesName].Legend; 
LegendCellColumnCollection cols = chart1.Legends[legendName].CellColumns; 
+0

感谢您的回复。我只有一个Legend和多达10个系列。在这种情况下,这是行不通的。我应该为每个系列都分开Legend吗?我虽然每个图表1就足够了。 – silverspoon

+1

@silverspoon - 你不必添加单独的图例,但使用'CustomItems'属性单独的图例项目,那么你可以分别控制项目。请参阅[this](http://msdn.microsoft.com/zh-cn/library/dd456659(v = vs.110).aspx)链接以获取更多信息 – Junaith

+0

谢谢@Junaith!这非常有帮助!使用CustomItem是我的问题的解决方案。 – silverspoon