在MS图表图例中显示值

时间:2014-03-05 00:24:54

标签: c# winforms mschart legend

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

        // 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"] 

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

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

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

chartSel.Legends.Add(ySeries.Name);

要访问系列中的图例列,

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

答案 1 :(得分: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);