Murali Bala
Murali Bala

Reputation: 81

How to directly print a Report without going through Crystal Reports Viewer

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?

Upvotes: 5

Views: 51153

Answers (7)

Code
Code

Reputation: 739

 private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (MessageBox.Show("Do you want to Print/View P.O? Please be patient as P.O may take few seconds to load.", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                pl.POId = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();
                DataTable dt = new DataTable();
                dt = bl.PurchaseOrderPrint(pl);
                if (dt.Rows.Count > 0)
                {
                    Reports.PuchaseOrder rpt = new Reports.PuchaseOrder();
                    Print f = new Print();
                    rpt.SetDataSource(dt);
                    f.CRV.ReportSource = rpt;
                    f.Show();
                }
            }
            else
            {
                return;
            }
        }

Upvotes: 0

Sagar Jadhav
Sagar Jadhav

Reputation: 129

So Simple

  1. Remove thes lines:

    crystalReportViewer1.ReportSource = objRpt;
    crystalReportViewer1.Refresh();
    
  2. Add this line:

    objRpt.PrintToPrinter(1, false, 0, 0);
    

Upvotes: 2

user5452645
user5452645

Reputation:

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.

Upvotes: 0

Er Ketan Vavadiya
Er Ketan Vavadiya

Reputation: 281

  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...

Upvotes: 0

RoastBeast
RoastBeast

Reputation: 1115

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.

Upvotes: 1

Suresh E
Suresh E

Reputation: 1

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)

Upvotes: 0

Related Questions