【发布时间】:2016-11-13 14:08:02
【问题描述】:
我在这方面发现了一些问题,但对我的逻辑没有任何帮助。我有以下代码(不显示全部,因为它太多了):
public int AreaCounter { get; set; } = 0;
public PrintDocument pd { get; set; }
public void PrintCharts(DataTable dt)
{
foreach (DataRow row in dt.Rows)
{
//after a couple of rows - here is code for creating
//a new chartArea and binding the points to the series
//plus binding that series to the area
if(// two chartAreas have been created with each one having a chart)
{
PrintChartControl();
}
AreaCounter++;
}
}
private void PrintChartControl()
{
pd.PrintPage += pd_PrintPage;
pd.Print();
}
private void pd_PrintPage(object sender, PrintPageEventArgs e)
{
if (AreaCounter < 11) //12 ChartAreas have to be created
e.HasMorePages = true;
else
e.HasMorePages = false;
var myRec = e.MarginBounds;
Container.chart1.Printing.PrintPaint(e.Graphics, myRec);
}
现在我想做的是: 我循环通过一个数据表。每隔几行,我就会创建一个新的 ChartArea,将这些行中的一些值绑定到一个系列,并将其绑定到 ChartArea。我实际上是在将 ChartAreas 绘制到我的图表控件中。每两个 ChartAreas 我打印控件,清理它,然后绘制接下来的两个 ChartAreas(最后有 12 个 - 所以 6 次绘制到图表控件)。这可行,但我想实现以下目标: 我想为我的打印事件中的每个图表控件添加一个新页面,以便最后有 6 页,然后将其打印到一个文件(pdf)中。由于 e.HasMorePages 属性,它以某种方式进入 printPage 事件中的不定式循环。这如何与图表一起使用? 非常感谢!
【问题讨论】:
-
你在哪里增加
AreaCounter? -
抱歉忘记了。编辑代码
-
您必须将您的打印逻辑和循环控制带到 PrintPage 事件处理程序中。看看this answer of mine 是否有帮助。
-
我不完全知道如何在我的情况下使用它。 IEnumerator
> ObjectsEnumerator;做我的 AreaCounter? -
不,应该是你的 dt.Rows
标签: c# winforms printing charts