使用 水晶报表 实现打印

时间:2022-08-26 16:18:43

       最近,给财务处开发了一个三联发票连打程序,使用的是C#--winform实现的。下面是水晶报表的基本概括:

水晶报表的一般概念

 水晶报表的两种模式:

 拉 PULL:设置好数据连接之后,使用水晶报表文件中所使用的获得数据的方式,由水晶报表自己解决数据获取操作。

推 PUSH:使用DataSet装载数据,然后填充到水晶报表中,再按照水晶报表的格式来展示。

查询的关键代码:

 

// string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\database\\db1.mdb";
        private string connectionString = ConfigurationManager.AppSettings["ConnectionString"];
        private void btnQuery_Click(object sender, EventArgs e)
        {

            string sql = "select * from payment where 1=1";
           
            if (txtYear.Text != "")
            {
                sql += "and  学费年度='"+txtYear.Text+"'";
            }
            if (txtStart.Text != "")
            {
                sql += " and 序号>=" + txtStart.Text;
            }
            if (txtEnd.Text != "")
            {
                sql += " and  序号<=" + txtEnd.Text;
            }
            if (txtXueFei.Text != "")
            {
                sql += " and 学费>=" + txtXueFei.Text;
            }
            if (txtXuefei1.Text != "")
            {
                sql += " and 学费<=" + txtXuefei1.Text;
            }
            if (txtZhusufei.Text != "")
            {
                sql += " and  住宿费>=" + txtZhusufei.Text;
            }
            if (txtZhusufei1.Text != "")
            {
                sql += " and  住宿费<=" + txtZhusufei1.Text;
            }
            using (OleDbConnection conn = new OleDbConnection(connectionString))
            {
                conn.Open();
          
                OleDbDataAdapter sda = new OleDbDataAdapter(sql, conn);
                DataSet paymentDataSet = new DataSet();
                sda.Fill(paymentDataSet, "payment");
                dataGridView1.DataSource = paymentDataSet.Tables["payment"];
               
            }
        }

打开打印窗口命令按钮的代码:

using (OleDbConnection conn = new OleDbConnection(connectionString))
            {
                conn.Open();
                OleDbDataAdapter sda = new OleDbDataAdapter(sql, conn);
                DataSet paymentDataSet = new DataSet();
                sda.Fill(paymentDataSet, "payment");
                ReportForm paymentReportForm = new ReportForm(paymentDataSet.Tables["payment"]);
                paymentReportForm.Show();
            }

在报表窗口中

  public  ReportForm(DataTable PaymentTable)
            {
                InitializeComponent();   
                CrystalReport1 paymentReport = new CrystalReport1();
                paymentReport.SetDataSource(PaymentTable);
                crystalReportViewer1.ReportSource = paymentReport;

为了实现连续打印,采用以下步骤设置:

  一、添加新的纸张格式
              1. 开始/设置/打印机和传真机
              2.选择当前的打印机后,  打开左上角的菜单,文件/服务器属性
              3.打开打印服务器属性, 格式/创建新格式,添入[表格名](例如:MyRePort)
              4.格式描述(尺寸),选择单位(公制、英制),纸张大小(宽度、高度),打印机区域边距(左、右、顶端、底部)
              5.鼠标单击[应用],[确定] 保存新的打印纸张格式。

              6.开始/设置/打印机和传真机,选择当前打印机鼠标右键/属性/常规/打印首选项/纸张/文件尺寸(例如:MyRePort)

      二、设置Crystal Reports水晶报表文件使用的打印纸张
                1.使用Crystal Reports水晶报表打开[*.rpt]报表文件
                2.打开Crystal Reports水晶报表左上角的菜单,文件/打印机设置
                3.选择纸张大小为刚才添加的新纸张格式(例如:MyRePort)[确定]保存
                4.在程序加载单据时就采用了新的纸张格式。

        三、采用打印窗体(和Printer设计)来打印单据
              1.完成{一、添加新的纸张格式}
              2.开始/设置/打印机和传真机,选择当前打印机鼠标右键/属性/常规/打印首选项/纸张/文件尺寸(例如:MyRePort)
              3.鼠标单击[应用] [保存]
              4.这时候打印的单据纸张就设置好了