我希望将数据表列与x轴中的x轴上的MS WinForm图表控件图例对齐,如在excel中,如所附图像中所示(通过使用c#和Microsoft.Office.Interop.Excel导出到Excel的测试结果)>
我的问题是,MS图表控件默认情况下是否支持任何选项/功能,以便像excel中一样显示图表图例和数据表?我的用户更喜欢在GUI(Winform)中查看,而不是导出到excel。 我已经在MSDN中进行了尽可能多的搜索,但仍然找不到它。
还有其他替代解决方案可以解决此问题吗?
表格列与MS图表X轴图例对齐:
答案 0 :(得分:0)
是,不是。
否,没有选项/功能以您显示的方式在表格中显示数据。
但是,您可以编写代码来实现这一目标。
我看到两个选择:
您可以创建带有单元格的自定义图例以保存表数据。参见here以获得类似的示例!
您可以嵌套DataGridView
,样式设置为您想要的样子,放在图表中。
两种方式都面临的难题是,无论是在初始时还是在调整图表大小时,都要使表格与数据点对齐。
在这方面,链接中的代码没有做很多事情。
第二个选项无论如何都必须使用Pre-
或PostPaint
事件来实现正确的定位,因此至少应该进行一定程度的对齐。
这是示例屏幕截图:
如您所见,我在DGV的样式设计上并没有付出太多努力。我既没有计算出高度,也没有添加一列来显示行/系列的颜色。
最有趣的代码是在PrePaint
事件中,我
这是我的代码:
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
。这实际上只是一个快速而肮脏的示例,您可以为其编写代码,但需要一些努力。.
依靠您希望它如何灵活和动态地工作,您将不得不添加(也许很多)代码。.