我有一个用VS 2008 for .net 2编写的应用程序,升级到VS 2010并为.net 4构建。在这个应用程序中是一个Crystal Report。报告应该完全没有数据库交互。我从项目中的一个对象手动设置各种ITextObject字段。
示例:
to = (CrystalDecisions.CrystalReports.Engine.TextObject)crystalPrint.Section2.ReportObjects["tbName"];
to.Text = visitor.first + " " + visitor.last;
to = (CrystalDecisions.CrystalReports.Engine.TextObject)crystalPrint.Section2.ReportObjects["tbCompany"];
to.Text = visitor.company;
其中visitor
是我从中提取数据的类。
同样,应该完全没有与此报告进行数据库交互,但是,它以某种方式认为它应该击中数据库。
这是相关的堆栈跟踪: CrystalDecisions.ReportAppServer.DataSetConversion
编辑:当我拨打.PrintToPrinter(1, false, 1, 0);
时,它正在爆炸
*编辑/更新* 我戳了app.config文件,发现了这个小块
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
在应用程序中,我的报告打印出来。随着它的评论,它爆炸了......
编辑3:
更多源代码:
cryBadge crystalPrint = new cryBadge();
crystalPrint.ReportOptions.EnableSaveDataWithReport = false;
//NOTE: pi is an internal object used to find printer information.
crystalPrint.PrintOptions.PrinterName = pi.PrinterName;
numSize = pi.FindPaperSizeIndex(height, wid);
to = (CrystalDecisions.CrystalReports.Engine.TextObject)crystalPrint.Section2.ReportObjects["tbName"];
to.Text = visitor.first + " " + visitor.last;
to = (CrystalDecisions.CrystalReports.Engine.TextObject)crystalPrint.Section2.ReportObjects["tbCompany"];
to.Text = visitor.company;
crystalPrint.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Landscape;
crystalPrint.PrintToPrinter(1, false, 1, 0);
答案 0 :(得分:0)
例如,如果我想使用Crystal Reports打印报告,我会执行以下操作
基于您的示例
.PrintToPrinter(1, false, 1, 0);
您可能想尝试重构代码,这是一个示例
ReportDocument rd = new ReportDocument();
// Insert code to run the report here
// This gets the user's default printer to print to.
PrintDialog prt = new PrintDialog();
rd.PrintOptions.PrinterName = prt.PrinterSettings.PrinterName;
// This does the printing.
rd.PrintToPrinter(copies, true, 1, 1000);
一个可以在下面尝试的工作示例..
//Note untested
PrintDialog pDialog = new PrintDialog();
Nullable<Boolean> print = pDialog.ShowDialog();
if (print == true)
{
string value1 = "This is a Test";
string value2= "Happy Halloween";
ReportDocument rd = new ReportDocument();
rd.Load("ReportFile.rpt");
rd.SetParameter("Parameter1", value1);
rd.SetParameter("Parameter2", value2);
rd.PrintOptions.PrinterName = pd.PrinterSettings.PrinterName;
rd.PrintToPrinter(1, false,0,0);
}
答案 1 :(得分:0)
好的。想出来了。
我必须在app.config文件中输入这段代码:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
然后确保配置文件保留.exe例如,如果应用程序名为“TestApp1”,则输出文件夹中应该有一个TestApp1.exe.config文件。该.config文件需要保留在应用程序中。