首页 > 解决方案 > DataTable 列与 Winform 图表图例对齐

问题描述

我想将数据表列与 x 轴中的 MS WinForm 图表控件图例对齐,就像在附件中的 excel 中一样(使用 c# 和 Microsoft.Office.Interop.Excel 导出到 Excel 的测试结果)

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

这个问题还有其他替代解决方案吗?

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

X

标签: c#winformsdatatablelegendmschart

解决方案


是和不是。

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

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

我看到两个选项:

  • 您可以使用单元格创建自定义图例来保存表格数据。请参阅此处以获取相当相似的示例!

  • 您可以将 嵌套DataGridView在图表中,按照您的意愿进行样式设置。

这两种方式的难题是使表格在最初以及在调整图表大小时都与数据点对齐。

链接中的代码在这方面没有做太多(如果有的话)。

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

这是一个示例屏幕截图:

在此处输入图像描述

正如你所看到的,我并没有在 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;
}

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

根据您希望它工作的灵活性和动态性,您将不得不添加(可能相当多)更多代码..


推荐阅读