Estoy Teniendo un problema en la impresión automática de informes con crystal reports. A continuación es mi fragmento de código

Es la Impresión, pero el problema es ignorar la ReportView.SelectionFormula (Que sólo contiene la página 1 hasta la Página 10), Pero la impresión de todos los registros en el origen de datos.

 ConnectionInfo ConInfo;
        try
        {
            this.Cursor = Cursors.WaitCursor;


            ConInfo = ConfigureCrystalReportsRD();

            ReportDocument.Load(reportToLoad);
            ReportView.ReportSource = ReportDocument;
            SetDBLogonForReportRD(ConInfo, ReportDocument);
            SetReserveFormulaValue();


            string strReportFilter = "";

            strReportFilter = ReportDocument.DataDefinition.RecordSelectionFormula;

            if (strReportFilter != "" && formulaFields != "")
            {
                ReportView.SelectionFormula = strReportFilter + " and " + formulaFields;
            }
            else
            {
                ReportView.SelectionFormula = formulaFields;
            }


            if (isPint == true)
            {
                this.Cursor = Cursors.WaitCursor;
                System.Drawing.Printing.PrinterSettings printer = new System.Drawing.Printing.PrinterSettings();
                System.Drawing.Printing.PageSettings page = new System.Drawing.Printing.PageSettings();
                ReportDocument.PrintToPrinter(printer,page,true);
                MessageBox.Show("Printing at " + printer.PrinterName + " .....");
                this.Cursor = Cursors.Default;

            }

            this.Cursor = Cursors.Default;


        }
        catch (Exception e)
        {
            oGenMethod.ErrorMessage(e.Message, FORMID, "PreviewReport");
        }

Nota:

ReportView.PrintReport() hace el trabajo con éxito, pero aparece la Configuración de la Impresora

Gracias de antemano!

EDICIÓN:

Lo malo en mi código es que yo sólo establecer el RecordSelectionFormula en ReportViewer Objeto no en el Documento de Informe.

ConnectionInfo ConInfo;

        string strReportFilter = "";

        try
        {
            this.Cursor = Cursors.WaitCursor;


            ConInfo = ConfigureCrystalReportsRD();

            ReportDocument.Load(reportToLoad);
            ReportView.ReportSource = ReportDocument;
            SetDBLogonForReportRD(ConInfo, ReportDocument);
            SetReserveFormulaValue();


            strReportFilter = ReportDocument.DataDefinition.RecordSelectionFormula;

            if (strReportFilter != "" && formulaFields != "")
                ReportView.SelectionFormula = strReportFilter + " and " + formulaFields;
            else
                ReportView.SelectionFormula = formulaFields;


            ReportDocument.DataDefinition.RecordSelectionFormula = ReportView.SelectionFormula;




            if (isPint == true)
            {
                this.Cursor = Cursors.WaitCursor;
                ReportDocument.PrintToPrinter(1, true, 0, 0);
                this.Cursor = Cursors.Default;              

}

InformationsquelleAutor jersoft | 2014-02-25

1 Comentario

  1. 3

    Hola si usted no desea que el pop-up se mostró usted tiene que utilizar el PrintToPrinter método de ReportDocument.

    así que usted debe hacer algo como esto en el código

    ReportDocument.Load(reportToLoad);
    SetDBLogonForReportRD(ConInfo, ReportDocument);
    SetReserveFormulaValue();
    strReportFilter = ReportDocument.DataDefinition.RecordSelectionFormula;
    if (strReportFilter != "" formulaFields != "")
    ReportDocument.DataDefinition.RecordSelectionFormula += " and " + formulaFields;
    else
    ReportDocument.DataDefinition.RecordSelectionFormula = formulaFields;
    ReportDocument.PrintToPrinter(1, true, 0, 0);

    esto debería resolver su problema.

    Como se pide aquí es el código que uso para poner a prueba la fórmula de selección y la PrintToPrinter método. Primero he creado un sistema muy fácil de informe basado en mi tabla de la cuenta, que me filtra en mi código por el código, así que tengo una cuenta.

    var cr = new ReportDocument();
    cr.Load(@"c:\Reports\Report1.rpt");
    cr.DataDefinition.RecordSelectionFormula = "{Account.Code} = '10000'";
    cr.PrintToPrinter(1, true, 0, 0);

    Este código imprimir un informe con un registro en él, y si un comentario el RecordSelectionFormulan línea, el informe se imprime toda la lista de cuentas

    • traté de que el código pero el problema es la fórmula en la ReportView.SelectionFormula no está siendo aplicado.
    • He actualizado el ejemplo, he tenido que tomar distancia Y la cláusula en la que si porque cuando traté de guardar el post me dio un error.De esta manera usted no necesita el visor de informes de objeto, puede filtrar el informe e imprimir directamente en la impresora predeterminada
    • ReportDocument.PrintToPrinter(1, true, 0, 0); – Si su impresión, pero la impresión de todas las páginas en el origen de datos. Se ignora el RecordSelectionFormula
    • Eso suena extraño, he intentado en un proyecto de prueba y los datos son filtrados antes de la impresión. Tengo de ver tu modificado el código para ver si el problema está ahí.
    • puede usted por favor enviar su código?
    • Acabo de actualizar el post
    • ¿Has probado a cambiar el código para que ‘10001’ o para el próximo disco? lo intenté, pero el problema es que sólo la impresión de la primera página 🙁
    • Sí, incluso me setted una fórmula de selección en el informe y el añadido de un segundo del código (como en tu ejemplo) y funcionó bien.
    • Tengo BRO! Traté de establecer también la ReportDocument.DataDefinition.RecordSelectionFormula (El documento ) y no en el Visor del informe de la fórmula (ReportView.SelectionFormula ) gracias por tu ayuda bro, realmente salva mi día! 😀
    • Si usted sólo tiene que imprimir el informe se puede quitar el ReportView de la página.

Dejar respuesta

Please enter your comment!
Please enter your name here