首页 > 代码库 > VS2013自带报表+打印功能

VS2013自带报表+打印功能

经过了VB版机房收费系统的学习,相信现在说起报表,我们已经不再觉得陌生。VB打印报表的功能是通过引用第三方控件来实现的,而相对的VS就在VB的基础上完善了这一功能,VS自带报表控件和打印功能,这样就给我们这些编程者带来了很大的方便。下面就将我做程序的一些小经历来跟大家一起分享一下。


1,我们右击U层所在文件夹添加“新建项”。



2,在弹出的的添加新建项窗口中找到“reporting”,在右面的内容窗口中选中“报表”选项,设置报表的名称。



3,点击确定后,显示如下界面。我们可以通过“报表数据”内的选项设置一些内置字段、参数等信息。如果界面不显示“报表数据”窗口, 可以通过“视图”——“报表数据(最后一项)”或者“Ctrl+Alt+D”来打开数据窗口。



4,在上图的“报表数据”窗口中选择“新建”——“数据集”,进入下图界面。选中“数据库”,下一步,,选中“数据集”,进入“数据源设置向导”窗口。



5,点击“新建连接”,在“添加连接”对话窗口中设置服务器名、用户名、密码、连接到的数据库等信息,然后点击“测试连接”,出现“测试连接成功”,然后确定,一直下一步。



6,给数据集添加需要应用的数据库对象,表、视图、存储过程等等。这里只用到了表,然后确定。



7,添加完成数据库对象后添加的相应信息显示如下界面。可以修改数据集名称。



8,设置完以上步骤后即可在“报表数据”窗口中看到新建的数据集信息了。



9,接下来就是设计报表格式了。打开左侧的工具箱,可以看到图示的“报表项”,文本框、表、矩阵、列表等等。如果没有工具性选项卡,可以“Ctrl+Alt+X”快捷打开。文本框用于显示文字、传递参数。表和矩阵则可以用来存放数据。不同的是表是针对于“列数固定、行数可变的数据”设计的,而矩形则是针对于“列数与行数均可变”的聚合数据设计的。



10,根据功能要求,设计完的报表界面如图所示,因此这里需要用到的工具是“表”。从表中可以看出,我们最后需要打印的是单条记录的信息,而机房中我们得到的都是整张表的信息,二者的区别在于:在报表绑定数据库的时候绑定的是指定的记录还是整张表。



11,首先在工具箱中选中工具“表”拖动到报表窗口中。由上图我们可以看到,不同于以前报表的是,格式发生了变化,其实很简单,只需合并单元格就可以了。例如,标题栏,选中标题栏所在行的所有列,鼠标右击,选中“合并单元格”就OK啦~~~在需要显示文本内容的列中直接双击输入信息即可,需要加载数据库信息的列点击右上角的数据集小图标即可自动加载相应的数据集信息,然后依次选中相应的信息选项即可。到此,报表就算是设计完了。接下来就是打印了。



13,首先在项目中新建一个windows窗体,在左侧的工具箱中“报表”文件夹下找到“ReportViewer”选中并将其拖放到窗体上,调整合适的大小与位置。



14,具体代码实现打印过程:

<pre name="code" class="csharp"><span style="font-family:KaiTi_GB2312;font-size:18px;">using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient ;
using Microsoft.Reporting.WinForms;
using System.Configuration;
using LRepairBill;


namespace RepairBill.UI
{
    public partial class ReportPrint : Form
    {
        public ReportPrint()
        {
            InitializeComponent();
        }

        private void ReportPrint_Load(object sender, EventArgs e)
        {
            reportViewer1.Clear();
            string bill_Num = CheckBill.str;
            string connstring = "server=.;database=Repair;uid=sa;pwd=123456";

            SqlConnection conn = new SqlConnection(connstring);

            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = "select*from repair_table where bill_num=@Bill_Num";
            cmd.Parameters.Add(new SqlParameter("@Bill_Num", bill_Num));
           
            conn.Open();
            cmd.ExecuteNonQuery();

            DataTable dt = new DataTable();
            
           try
            {
                System.Data.SqlClient.SqlDataAdapter ada1 = new System.Data.SqlClient.SqlDataAdapter(cmd);
                ada1.Fill(dt);
               
            }
            finally
            {
                conn.Close();
                cmd.Dispose();
                conn.Dispose();
            }
            ReportDataSource rds = new ReportDataSource("DataSet1", dt);
            this.reportViewer1.LocalReport.DataSources.Clear();

            this.reportViewer1.LocalReport.DataSources.Add(rds);        
            //为报表浏览器指定报表文件
            this.reportViewer1.LocalReport.ReportEmbeddedResource = "RepairBill.UI.RepairReport.rdlc";  //指定数据集,数据集名称后为表,不是DataSet类型的数据集  

            this.reportViewer1.RefreshReport();
            //reportViewer1.clear();
            //this.reportViewer2.RefreshReport();
        }</span>


特别需要注意的是,在为报表浏览器指定报表文件时,如果不确定到底该怎么写,可以通过以下路径来确定,如果此处出现错误,可能会提示N种报错信息,为了节省时间,所以一开始就要仔细确认好。



通过这次的总结,再次验证了“学习是一个反复的过程。这里,只跟大家分享了我用到的部分和遇到的一些问题,更多的知识还需要大家自己去学习和运用。也希望大家来一起交流,一起积累,一起进步。