Как исправить пропущенную ошибку параметра printtoprint для печати Crystal Report на C#?
Я пытаюсь использовать этот код для печати отчета Crystal без средства просмотра, но получаю сообщение об ошибке "Недостающие параметры", почему? Я принимаю ошибку в этой части кода:
cryRpt.PrintToPrinter(1, true, 0, 0);
Мой весь код:
CrystalReportViewer cw = new CrystalReportViewer();
ReportDocument cryRpt = new ReportDocument();
cw.Dock = DockStyle.Fill;
panel1.Controls.Add(cw);
cryRpt.Load(@"C:\..\Reports\Pm_PaperlessFacRpt.rpt");
ParameterField paramField = new ParameterField();
ParameterFields paramFields = new ParameterFields();
ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();
paramField.Name = "@Id";
paramDiscreteValue.Value = 71599;
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);
cw.ParameterFieldInfo = paramFields;
ParameterFieldDefinitions crParameterFieldDefinitions;
ParameterFieldDefinition crParameterFieldDefinition;
ParameterValues crParameterValues = new ParameterValues();
ParameterDiscreteValue crParameterDiscreteValue = new ParameterDiscreteValue();
crParameterDiscreteValue.Value = Convert.ToInt32(71599);
crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields;
crParameterFieldDefinition = crParameterFieldDefinitions["@Id"];
crParameterValues = crParameterFieldDefinition.CurrentValues;
crParameterValues.Clear();
crParameterValues.Add(crParameterDiscreteValue);
crParameterFieldDefinition.ApplyCurrentValues(crParameterValues);
// cryRpt.SetParameterValue("@Id", 71599);
cryRpt.SetDatabaseLogon("sa", "123", "server", "db");
cryRpt.Refresh();
cryRpt.PrintOptions.PrinterName = "HP LaserJet Pro M201-M202 PCL 6";
cryRpt.PrintOptions.PaperSource = PaperSource.Auto;
cryRpt.PrintOptions.PaperOrientation = PaperOrientation.Portrait;
cryRpt.PrintOptions.PaperSize = PaperSize.PaperLetter;
cryRpt.PrintToPrinter(1, true, 0, 0);
cw.ReportSource = cryRpt;
cw.Refresh();
Как я могу исправить эту ошибку? Кроме того, моя Visual Studio 2013 и я выполнили 32-разрядную версию, моя версия Crystal Report третья часть версии 8.5, и я использую CrystalDecisions.CrystalReports lib версии 13.0.2000.0, и мой фреймворк 3.5
1 ответ
Если вы заинтересованы только в печати напрямую, как указано выше, вот как вы можете это сделать. Я знаю, что это не то же самое, что вы написали, но у вас так много строк кода, что меня это смущает, поэтому вот упрощенная версия:
// create report document
var rpt = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
// load from file
rpt.Load(@"C:\..\Reports\Pm_PaperlessFacRpt.rpt");
// set parameters
rpt.SetParameterValue("Id", 71599);
// set data source
rpt.SetDatabaseLogon("sa", "123", "server", "db");
// print to printer page 1 to 1
rpt.PrintToPrinter(1, false, 1, 1);