I wrote this code to print a Crystal report.. but I got error
'missing parameters'...
ReportDocument rdoc = new ReportDocument();
rdoc .Load (Application.StartupPath +"\\"+@"REPORTS\SalaryReport.rpt");
rdoc.SetDataSource(ds.Tables[0]);
ParameterFields pfs = new ParameterFields();
ParameterField pfv = new ParameterField();
ParameterDiscreteValue pdv1 = new ParameterDiscreteValue();
pfv.Name = "fd";
pdv1.Value = fd;
pfv.CurrentValues.Add(pdv1);
pfs.Add(pfv);
ParameterField pfv1 = new ParameterField();
ParameterDiscreteValue pdv11 = new ParameterDiscreteValue();
pfv1.Name = "td";
pdv11.Value = td;
pfv1.CurrentValues.Add(pdv11);
pfs.Add(pfv1);
ParameterField pfv2 = new ParameterField();
ParameterDiscreteValue pdv12 = new ParameterDiscreteValue();
pfv2.Name = "department";
pdv12.Value = Dept;
pfv2.CurrentValues.Add(pdv12);
pfs.Add(pfv2);
crystalReportViewer1.ParameterFieldInfo = pfs;
crystalReportViewer1.ReportSource = rdoc;
PrinterSettings getprinterName = new PrinterSettings();
rdoc.PrintOptions.PrinterName = getprinterName.PrinterName;
rdoc.PrintToPrinter(1, true, 1, 1);
So help to solve this issue....how to print directly without going through Crystal Reports Viewer?
Please use PrintToPrinter method to directly print crystal report.
http://msdn.microsoft.com/en-us/library/aa691452%28VS.71%29.aspx
http://www.nullskull.com/q/10110521/print-crystal-report-without-viewing.aspx
reportname report1=new reportname();
report1.PrintOptions.PaperOrientation = PaperOrientation.Portrait;
report1.PrintOptions.PaperSize = PaperSize.PaperA4;
report1.PrintToPrinter(1, false, 0, 15);
use these codes with function(Parameters)
Printing directly to the printer is not going to solve your problem. The Crystal Report requires parameters to be set correctly and they're not for some reason.
List<BusLib.Report.ReportParameter> ParaList = new List<BusLib.Report.ReportParameter>();
ParaList.Add(new BusLib.Report.ReportParameter("Para1", Value1));
ParaList.Add(new BusLib.Report.ReportParameter("Para2", Value2));
ParaList.Add(new BusLib.Report.ReportParameter("Para3", Value3));
ParaList.Add(new BusLib.Report.ReportParameter("Para4", Value4));
After That..
public void SetParameters(List<BusLib.Report.ReportParameter> pParams)
{
if (pParams == null) { return; }
try
{
foreach (BusLib.Report.ReportParameter pPara in pParams)
{
CReport.SetParameterValue(pPara.ParameterName, pPara.ParameterValue);
}
}
catch (Exception Ex)
{
Val.Message(Ex.Message.ToString());
}
}
you should try this ... you will get definetly success...
private void PrintReport(string reportPath, string PrinterName)
{
CrystalDecisions.CrystalReports.Engine.ReportDocument rptDoc =
new CrystalDecisions.CrystalReports.Engine.ReportDocument();
rptDoc.Load(reportPath);
CrystalDecisions.Shared.PageMargins objPageMargins;
objPageMargins = rptDoc.PrintOptions.PageMargins;
objPageMargins.bottomMargin = 100;
objPageMargins.leftMargin = 100;
objPageMargins.rightMargin = 100;
objPageMargins.topMargin = 100;
rptDoc.PrintOptions.ApplyPageMargins(objPageMargins);
//rptDoc.PrintOptions.PrinterName = PrinterName;
rptDoc.PrintToPrinter(1, false, 0, 0);
}
private void PrintToPrinter()
{
PrintReport(System.Windows.Forms.Application.StartupPath +"\\VCrpfrmprint.rpt","Send To OneNote 2010");
}
rptDoc.PrintToPrinter
method prints the specified pages of the report to the printer selected with the help of the PrintOptions.PrinterName
property.
If no printer is selected, the default printer specified in the report will be used.
We are using PrintToPrinter
method as :
public void PrintToPrinter (int nCopies , boolean collated , int startPage , int endPage );
where:
nCopies
indicates the number of copies to print.
collated
indicates whether to collate the pages.
startPage
indicates the first page to print.
endPage
indicates the last page to print.