DataTable列与Winform Chart图例对齐

时间:2018-10-07 16:58:11

标签: c# winforms datatable legend mschart

我希望将数据表列与x轴中的x轴上的MS WinForm图表控件图例对齐,如在excel中,如所附图像中所示(通过使用c#和Microsoft.Office.Interop.Excel导出到Excel的测试结果)

我的问题是,MS图表控件默认情况下是否支持任何选项/功能,以便像excel中一样显示图表图例和数据表?我的用户更喜欢在GUI(Winform)中查看,而不是导出到excel。 我已经在MSDN中进行了尽可能多的搜索,但仍然找不到它。

还有其他替代解决方案可以解决此问题吗?

表格列与MS图表X轴图例对齐:

x

1 个答案:

答案 0 :(得分:0)

是,不是。

否,没有选项/功能以您显示的方式在表格中显示数据。

但是,您可以编写代码来实现这一目标。

我看到两个选择:

  • 您可以创建带有单元格的自定义图例以保存表数据。参见here以获得类似的示例!

  • 您可以嵌套DataGridView,样式设置为您想要的样子,放在图表中。

两种方式都面临的难题是,无论是在初始时还是在调整图表大小时,都要使表格与数据点对齐。

在这方面,链接中的代码没有做很多事情。

第二个选项无论如何都必须使用Pre-PostPaint事件来实现正确的定位,因此至少应该进行一定程度的对齐。

这是示例屏幕截图:

enter image description here

如您所见,我在DGV的样式设计上并没有付出太多努力。我既没有计算出高度,也没有添加一列来显示行/系列的颜色。

最有趣的代码是在PrePaint事件中,我

  • 为嵌套的DGV保留空间
  • 计算DGV的左侧和宽度

这是我的代码:

private void chart1_PrePaint(object sender, ChartPaintEventArgs e)
{
    ca1.Position.Height = 60;  // percent of chart!
    L1.Position.Y = 90;        // percent of chart!

    dataGridView1.Parent = chart1;

    int y = (int) ca1.AxisY.ValueToPixelPosition(ca1.AxisY.PositionToValue(65));

    int x1 = (int) ca1.AxisX.ValueToPixelPosition(ca1.AxisX.Minimum);
    int x2 = (int) ca1.AxisX.ValueToPixelPosition(ca1.AxisX.Maximum);

    dataGridView1.Top = y;
    dataGridView1.Left = x1;
    dataGridView1.Width = x2 - x1;
}

L1Legend,而ca1ChartArea。这实际上只是一个快速而肮脏的示例,您可以为其编写代码,但需要一些努力。.

依靠您希望它如何灵活和动态地工作,您将不得不添加(也许很多)代码。.