如何使用C#在Windows应用程序中打印水晶报告而不显示预览和打印机选择

本文关键字:显示 选择 打印机 报告 水晶 何使用 Windows 应用程序 打印 | 更新日期: 2023-09-27 18:37:07

我正在做账单应用程序,所以我需要在没有报告预览的情况下打印账单。而且,我不喜欢在打印机对话框弹出窗口中选择打印机。它应选择默认打印机。

"打印到打印机"不符合我的要求。我需要发送最新创建的账单 ID 作为参数以获取最新详细信息。

如果我不使用" PrintToPrinter "语法,则打印机对话框弹出屏幕将带有"选择打印机"对话框。

请指导我解决这个问题。

供您参考,我附上了我的代码片段:

Report_Path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) + "''Reports''StandardBill.rpt";                        
ReportDocument rd = new ReportDocument();
rd.Load(Report_Path);
rd.SetDatabaseLogon(AccessingData.DBUserName, AccessingData.DBPassword);
ParameterFields paramFields = new ParameterFields();
ParameterField BillID = new ParameterField();
ParameterDiscreteValue discreteVal_BillID = new ParameterDiscreteValue();
BillID.ParameterFieldName = "BillNo";
discreteVal_BillID.Value = Convert.ToInt32(Bill_id);
BillID.CurrentValues.Add(discreteVal_BillID);
ParameterField CType = new ParameterField();
ParameterDiscreteValue discreteVal_CType = new ParameterDiscreteValue();
CType.ParameterFieldName = "ClientType";
discreteVal_CType.Value = ClientType;
CType.CurrentValues.Add(discreteVal_CType);
// Add parameter to the parameter fields collection.
paramFields.Add(BillID);
paramFields.Add(CType);
CRViewer1.ParameterFieldInfo = paramFields;
CRViewer1.ReportSource = rd;                        
CRViewer1.PrintReport();
rd.Close();
rd.Dispose();

如何使用C#在Windows应用程序中打印水晶报告而不显示预览和打印机选择

你可以

试试这个

                Dim crtableLogoninfos As New TableLogOnInfos
                Dim crtableLogoninfo As New TableLogOnInfo
                Dim crConnectionInfo As New ConnectionInfo
                Dim CrTables As Tables
                Dim CrTable As Table
                Dim cryRpt As New ReportDocument
                cryRpt.Load("report path")
                With crConnectionInfo
                    .ServerName = "servername"
                    .DatabaseName = "databasename"
                    .UserID = "userid"
                    .Password = "password"
                    .IntegratedSecurity = False
                End With
                CrTables = cryRpt.Database.Tables
                For Each CrTable In CrTables
                    crtableLogoninfo = CrTable.LogOnInfo
                    crtableLogoninfo.ConnectionInfo = crConnectionInfo
                    CrTable.ApplyLogOnInfo(crtableLogoninfo)
                Next
                cryRpt.SetDatabaseLogon("userid", crConnectionInfo.Password, crConnectionInfo.ServerName, crConnectionInfo.DatabaseName, crConnectionInfo.IntegratedSecurity)
                Dim crParameterFieldDefinitions As ParameterFieldDefinitions
                Dim crParameterFieldDefinition As ParameterFieldDefinition
                Dim crParameterValues As New ParameterValues
                Dim crParameterDiscreteValue As New ParameterDiscreteValue
                crParameterDiscreteValue.Value = BillID
                crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields
                crParameterFieldDefinition = crParameterFieldDefinitions.Item("BillID")
                crParameterValues = crParameterFieldDefinition.CurrentValues
                crParameterValues.Add(crParameterDiscreteValue)
                crParameterFieldDefinition.ApplyCurrentValues(crParameterValues)
                crParameterValues.Clear()
                 cryRpt.PrintOptions.PrinterName = "printername"
                cryRpt.PrintToPrinter(1, False, 0, 0)

            End If

我认为这应该可以解决问题。不过它在 VB 中。