c# - DataTable 列与 Winform 图表图例对齐
问题描述
我想将数据表列与 x 轴中的 MS WinForm 图表控件图例对齐,就像在附件中的 excel 中一样(使用 c# 和 Microsoft.Office.Interop.Excel 导出到 Excel 的测试结果)
我的问题是,MS 图表控件默认支持的任何选项/功能是否可以像在 excel 中一样显示图表图例和数据表?我的用户更喜欢在 GUI (Winform) 中查看,而不是导出到 excel。我一直在 MSDN 中尽可能多地搜索,但仍然找不到。
这个问题还有其他替代解决方案吗?
表列与 MS 图表 X 轴图例对齐:
解决方案
是和不是。
不,没有选项/功能可以按照您显示的方式在表格中显示数据。
但是,是的,您可以编写代码来实现这一点。
我看到两个选项:
您可以使用单元格创建自定义图例来保存表格数据。请参阅此处以获取相当相似的示例!
您可以将 嵌套
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;
}
L1
是Legend
和ca1
是ChartArea
。这实际上只是一个快速而肮脏的示例,您可以为其编写代码,但需要一些努力..
根据您希望它工作的灵活性和动态性,您将不得不添加(可能相当多)更多代码..
推荐阅读
- node.js - 范围/角色声明在客户端凭据访问令牌中不可用
- html - 如何使用angular 7在html中调用与字符串“组件名称”相同的组件
- java - JasperReports Scriptlet 在预览中工作,但在编译时不工作
- sql-server - MSSQL 检查列是否全为数字或为空
- vue.js - VueJS 未知组件
- c# - 如何检查版本号是否是两个版本号之间的版本
- r - R中的相关网络图
- jquery - 如何将 jQuery 元素添加到现有的 jquery 变量
- pdf - acrobat reader 在阅读文档时出错,可能已损坏且无法修复
- html - 如何将验证器用于数字范围?