访问FieldObject以进行页面计数的问题

时间:2009-11-11 16:09:06

标签: crystal-reports

我们正在使用与VS2005捆绑在一起的Crystal Reports.NET。我们有一份确认预订表单信函报告,我们要批量打印。一般来说,这会在信头纸上每人打印一页,但偶尔如果他们预订了很多课程,这封信就会翻到两页。第二页不应打印在信头纸上。

基本上,因为这是一个罕见的事件,我只是要打印该批次并暂停,如果一个特定的字母超过1页。即加载报告,获取页面数量,如果超过一页,则抓住用户的hollah,否则继续进行。

我在报告的页脚上放了一个TotalPageCount(如果它有效的话我会压制它!)然后尝试在我的应用程序中读取它。

一旦我加载了我试图打电话的文件

report.ReportDefinition.ReportObjects("TotalPageCount1")

其类型为CrystalDecisions.CrystalReports.Engine.FieldObject

我似乎无法从爱中获得价值,也没有钱(也没有任何诅咒和咒骂!)

我可以读取TextObject类型的任何项目,但是如果我将TotalPageCount附加到文本字段,它会在报告中正确显示,但会返回“Page count:TotalPageCount”而不是“Page count:1”。 / p>

Soo,没有忘记,有没有人有任何建议?无论是读取价值的方式还是绕过它的方式。打印机没有多个托盘,但即使我们有一个托盘,我也不确定如何说服水晶将不同的页面打印到不同的托盘上。

3 个答案:

答案 0 :(得分:2)

我只花了一个时间来寻找这个答案。想想我已经设法使其工作如下..(VC2008,C#.net Windows窗体查看器等)

使用CrystalDecisions.Shared;

int iPageCount = report1.FormatEngine.GetLastPageNumber(new ReportPageRequestContext());

  • 不确定原因,但我的自动完成功能甚至没有注册FormatEngine。但它确实有效。

希望它有所帮助!

詹姆斯肯特

答案 1 :(得分:0)

为什么不将总页数字段嵌入到公式字段中,然后获取公式字段的值?

尝试ReportDocument.FormatEngine.GetLastPageNumber(New CrystalDecisions.Shared.ReportPageRequestContext)

答案 2 :(得分:0)

我知道这是一个老问题,但我有一个关于打印到不同托盘的解决方案。关于定义打印机文件源的全部内容,请参阅下面的示例代码......

PageRange range = pageRange;
var tray = printerToUse.PrinterTrays.FirstOrDefault(t => t.PaperTypeId == range.PaperTypeId);
var printerSettings = new PrinterSettings
                    {
                        FromPage = pageRange.StartPage,
                        ToPage = pageRange.EndPage ?? 0,
                        PrinterName = printerToUse.PrinterName,
                        Copies = copies,
                    };
PaperSource paperSource = printerSettings.PaperSources
                    .OfType<PaperSource>()
                    .FirstOrDefault(
                        ps => ps.SourceName.Trim().Equals(tray.Name, StringComparison.InvariantCultureIgnoreCase));
                var pageSettings = new PageSettings(printerSettings)
                    {
                        PaperSource = paperSource,
                    };
_internalDocument.PrintToPrinter(printerSettings, pageSettings, false);