【问题标题】:DataTable Column align to Winform Chart legendDataTable 列与 Winform 图表图例对齐
【发布时间】:2018-10-07 16:58:11
【问题描述】:
我想将数据表列与 x 轴上的 MS WinForm 图表控件图例对齐,就像在附件中的 excel 中一样(使用 c# 和 Microsoft.Office.Interop.Excel 导出到 Excel 的测试结果)
我的问题是,MS 图表控件默认支持的任何选项/功能是否可以像在 excel 中一样显示图表图例和数据表?我的用户更喜欢在 GUI (Winform) 中查看,而不是导出到 excel。
我已经尽可能多地在 MSDN 中搜索,但仍然找不到。
对于这个问题还有其他替代解决方案吗?
表格列与 MS 图表 X 轴图例对齐:
【问题讨论】:
标签:
c#
winforms
datatable
legend
mschart
【解决方案1】:
是和不是。
不,没有选项/功能可以按照您显示的方式在表格中显示数据。
但是是的,您可以编写代码来实现这一点。
我看到两个选项:
这两种方式的难题是使表格在最初以及在调整图表大小时都与数据点对齐。
链接中的代码在这方面没有做太多,如果有的话。
第二个选项无论如何都必须使用Pre- 或PostPaint 事件来实现正确定位,因此至少应该发生某种程度的对齐。
这是一个示例截图:
如您所见,我并没有在 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;
}
L1 是 Legend,ca1 是 ChartArea。这实际上只是一个快速而肮脏的示例,您可以为其编写代码,但需要一些努力..
根据您希望它工作的灵活性和动态性,您将不得不添加(可能相当多)更多代码..