C# 如何获取要在条形图图例中显示的系列数据

C# 如何获取要在条形图图例中显示的系列数据,c#,winforms,charts,bar-chart,legend,C#,Winforms,Charts,Bar Chart,Legend,我有一个Windows窗体应用程序,它根据存储在数据库中的数据显示图形。我能够得到数据以条形图或饼图的形式显示。但条形图中的图例仅显示系列名称“Series1”。饼图的图例显示序列数据的正确图例。我搜索了MSDN,找到了几篇关于添加图例的文章,但它们都有相同的结果 这是我的条形图代码: string[] xvals = new string[dt.Rows.Count]; int[] yvals = new int[dt.Rows.Count];

我有一个Windows窗体应用程序,它根据存储在数据库中的数据显示图形。我能够得到数据以条形图或饼图的形式显示。但条形图中的图例仅显示系列名称“Series1”。饼图的图例显示序列数据的正确图例。我搜索了MSDN,找到了几篇关于添加图例的文章,但它们都有相同的结果

这是我的条形图代码:

        string[] xvals = new string[dt.Rows.Count];
        int[] yvals = new int[dt.Rows.Count];

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            xvals[i] = dt.Rows[i]["XValues"].ToString();
            yvals[i] = Convert.ToInt32(dt.Rows[i]["YValues"].ToString());
        }

        Chart barChart = new Chart();
        ChartArea chartArea = new ChartArea();
        barChart.ChartAreas.Add(chartArea);
        barChart.Dock = DockStyle.Fill;
        barChart.BackColor = Color.Transparent;
        barChart.Palette = ChartColorPalette.Fire;
        barChart.ChartAreas[0].BackColor = Color.Transparent;
        barChart.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
        barChart.ChartAreas[0].AxisY.MajorGrid.Enabled = false;

        Series series1 = new Series
        { Name = "Series1", IsVisibleInLegend = true, ChartType = SeriesChartType.Bar };
        series1.ChartType = SeriesChartType.Column;

        barChart.Series.Add(series1);
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            series1.Points.AddXY(dt.Rows[i]["XValues"].ToString(),
                Convert.ToInt32(dt.Rows[i]["YValues"].ToString()));
            var p1 = series1.Points[i];
            p1.Color = Color.FromArgb((byte)r.Next(90, 255), (byte)r.Next(90, 255), 160);
        }

        barChart.Legends.Add(new Legend("Legend1"));
        barChart.Legends["Legend1"].BackColor = Color.Transparent;
        barChart.Series["Series1"].Legend = "Legend1";
        series1.IsVisibleInLegend = true;

        gbo1.Controls.Add(barChart);
            string[] xvals = new string[dt.Rows.Count];
        int[] yvals = new int[dt.Rows.Count];

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            xvals[i] = dt.Rows[i]["XValues"].ToString();
            yvals[i] = Convert.ToInt32(dt.Rows[i]["YValues"].ToString());
        }

        Chart pieChart = new Chart();
        ChartArea chartArea = new ChartArea();
        chartArea.Name = "PieChartArea";
        pieChart.ChartAreas.Add(chartArea);
        pieChart.Dock = DockStyle.Fill;
        pieChart.Location = new Point(0, 50);

        pieChart.Palette = ChartColorPalette.Fire;
        pieChart.BackColor = Color.Transparent;
        pieChart.ChartAreas[0].BackColor = Color.Transparent;

        Series series2 = new Series
        { Name = "Series2", IsVisibleInLegend = true, ChartType = SeriesChartType.Pie };

        pieChart.Series.Add(series2);
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            series2.Points.Add((int)dt.Rows[i]["YValues"]);
            var p2 = series2.Points[i];
            p2.Color = Color.FromArgb((byte)r.Next(90, 255), (byte)r.Next(90, 255), 160);
            p2.LegendText = dt.Rows[i]["XValues"].ToString();
        }

        pieChart.Legends.Add(new Legend("Legend2"));
        pieChart.Legends["Legend2"].BackColor = Color.Transparent;
        pieChart.Series["Series2"].Legend = "Legend2";
        series2.IsVisibleInLegend = true;

        gboReport1.Controls.Add(pieChart);
string[]xvals=新字符串[dt.Rows.Count];
int[]yvals=新的int[dt.Rows.Count];
对于(int i=0;i
以下是我的饼图代码:

        string[] xvals = new string[dt.Rows.Count];
        int[] yvals = new int[dt.Rows.Count];

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            xvals[i] = dt.Rows[i]["XValues"].ToString();
            yvals[i] = Convert.ToInt32(dt.Rows[i]["YValues"].ToString());
        }

        Chart barChart = new Chart();
        ChartArea chartArea = new ChartArea();
        barChart.ChartAreas.Add(chartArea);
        barChart.Dock = DockStyle.Fill;
        barChart.BackColor = Color.Transparent;
        barChart.Palette = ChartColorPalette.Fire;
        barChart.ChartAreas[0].BackColor = Color.Transparent;
        barChart.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
        barChart.ChartAreas[0].AxisY.MajorGrid.Enabled = false;

        Series series1 = new Series
        { Name = "Series1", IsVisibleInLegend = true, ChartType = SeriesChartType.Bar };
        series1.ChartType = SeriesChartType.Column;

        barChart.Series.Add(series1);
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            series1.Points.AddXY(dt.Rows[i]["XValues"].ToString(),
                Convert.ToInt32(dt.Rows[i]["YValues"].ToString()));
            var p1 = series1.Points[i];
            p1.Color = Color.FromArgb((byte)r.Next(90, 255), (byte)r.Next(90, 255), 160);
        }

        barChart.Legends.Add(new Legend("Legend1"));
        barChart.Legends["Legend1"].BackColor = Color.Transparent;
        barChart.Series["Series1"].Legend = "Legend1";
        series1.IsVisibleInLegend = true;

        gbo1.Controls.Add(barChart);
            string[] xvals = new string[dt.Rows.Count];
        int[] yvals = new int[dt.Rows.Count];

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            xvals[i] = dt.Rows[i]["XValues"].ToString();
            yvals[i] = Convert.ToInt32(dt.Rows[i]["YValues"].ToString());
        }

        Chart pieChart = new Chart();
        ChartArea chartArea = new ChartArea();
        chartArea.Name = "PieChartArea";
        pieChart.ChartAreas.Add(chartArea);
        pieChart.Dock = DockStyle.Fill;
        pieChart.Location = new Point(0, 50);

        pieChart.Palette = ChartColorPalette.Fire;
        pieChart.BackColor = Color.Transparent;
        pieChart.ChartAreas[0].BackColor = Color.Transparent;

        Series series2 = new Series
        { Name = "Series2", IsVisibleInLegend = true, ChartType = SeriesChartType.Pie };

        pieChart.Series.Add(series2);
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            series2.Points.Add((int)dt.Rows[i]["YValues"]);
            var p2 = series2.Points[i];
            p2.Color = Color.FromArgb((byte)r.Next(90, 255), (byte)r.Next(90, 255), 160);
            p2.LegendText = dt.Rows[i]["XValues"].ToString();
        }

        pieChart.Legends.Add(new Legend("Legend2"));
        pieChart.Legends["Legend2"].BackColor = Color.Transparent;
        pieChart.Series["Series2"].Legend = "Legend2";
        series2.IsVisibleInLegend = true;

        gboReport1.Controls.Add(pieChart);
string[]xvals=新字符串[dt.Rows.Count];
int[]yvals=新的int[dt.Rows.Count];
对于(int i=0;i
我错过了什么?请帮忙

以下是条形图的输出:

以下是饼图的输出:

这就是
条形图和
饼图的设计方法

饼图
以外的所有
图表类型
在其
图例中显示
系列。名称
系列文本

只有
饼图
图表(无论如何只有一个
系列
)将显示
数据点。y值[0]

如果您真的想在
图例中显示数据点数据,您可以这样做,但如果添加多个数据点,当然会显得很拥挤

这是一个示例,说明了如何添加隐藏常规图例和添加显示数据值的新图例:

chart1.ApplyPaletteColors();
chart1.Legends[0].Enabled = false;

Legend L2 = new Legend();
chart1.Legends.Add(L2);
L2.Docking = Docking.Right;
foreach (DataPoint dp in yourSeries.Points)
{
    LegendItem LI = new LegendItem(dp.YValues[0].ToString("0.##"), dp.Color, "");
    LI.BorderWidth = 0;
    L2.CustomItems.Add(LI);
}

如果需要,您还可以将这些项目添加到常规的
图例中
;只需创建对它的引用并使用上面的代码:

Legend L1 = chart1.Legends[0];

请注意,您不能从原始的
图例中删除原始项目

您正在使用哪个图表api?这就是您的意思:使用System.Windows.Forms.DataVisualization.Charting;