• 制作水晶报表


    窗体顶端

     

    使用RDLC报表(1) -(4) (一篇好文章收藏并与与大家分享) 

    使用RDLC报表(1) -(4)

    使用RDLC报表()

      

    1       建立数据源

    启动VS2005新建一个窗体项目,命名为TestProj

     

    在左边的窗体内选择添加新数据源或在菜单上操作添加新数据源

     

    选择后出现对话窗体,选择数据库,进入下一步

     

    本数据源以SqlServer2000所提供的Northwind数据库为例,因此在数据库内选择驱动程序为SqlServer,具体操作视所用数据库而定(如果连接为Oracle,建议用Oracle所提供的ODP for .NET,地址:http://www.oracle.com/technology/global/cn/software/tech/windows/odpnet/index.html)。

     

    选择数据源后,指定数据库文件,并进行测试,如果连接不通,请检查你的软件设置。

     

    进行下一步,至显示出库文件内的表及视图,然后打开表,并选择其中的Employees,选择完成。

     

    在数据源窗口中显示出所选择表及表内的字段,以备使用。

     

    同时在资源管理器中,也可以看到新增加的数据文件。

     

    2       报表浏览器

    在新建的窗体内,放入报表浏览控件:

     

    此报表浏览控件集成了报表查看及打印预览的功能,可直接输出至打印机,也可直接输出至Excel文件或PDF文件,对于喜欢看Excel表格的客户来说,这个报表控件非常不错。关于此报表的来源及台前幕后的各种说法,请自己查询相关的网站。

    3       建立报表文件

    选中报表浏览器控件后,在控件的右上角会出现一个小三角,点击后,出现一个菜单,选择设计新报表或在解决方案资源管理器中添加一个新的报表文件:

     

    双击报表项内的,则设计空白表内生成一个表格,我们可以在表格内添加数据项。

     

    此报表的设计方式类似于MS以前的VB下报表设计环境。在报表设计器中,我将一份报表分为五个部分,从上至下为:报表标题区、列标题区、数据显示区、合计及页脚。如果将报表的设计形式显示出页眉及页脚,报表的形式会看得更清楚些:

    选择页眉及页脚:

     

    显示结果:

     

    现在开始设计报表:

    页眉区内放入一个文本框,将内容更改为测试报表,居中,字体放大加粗:

     

    从数据源窗口中选择合适的列,用鼠标拖到报表内的详细信息表格上,数据会自动填入:

     

     

    将设计的报表保存后,返回报表浏览窗口,并为报表浏览器选择我们设计的报表:

     

    选中报表文件后,菜单也有所改变:

     

    再为此报表文件指定数据源,选择数据源:

     

    确定,保存文件并运行测试文件。

    4       预览

    报表生成后预览如下:

     

    是不是很简单?我们也可以对这个简单的报表进行美化,当然,我加上美化的一些功能后,可能效果更差,但此处只是为了演示用法。

    Ø         为数据加表格。

    在报表设计器中,选择需要加表格框的区域

     

    然后在工具栏中选择边框工具

     

    加什么样的框线根据需要,此处我选择所有框线

     

    看上去比原来的灰线能稍黑一些,在预览时就能看出来了。

    Ø         加打印时间显示

    加入一个显示打印时间的文本框,在上面按右键,选属性:

     

    文件框属性内,选择后面的表达式生成:

     

    在表达式中选择时间:

     

    不要忘记表达式的前面一定要有一个,如果没有,手工加上一个。为了更符合我们的习惯,前面可以加个说明,如打印时间等,表达式的写法就要稍做改变:还是以开头,后面加上打印时间:,再以连接生成的Now函数即可得到我们想要的样子。

     

    Ø         为行加序号

    为了演示,我将序号列加在了表格了最后列

    加入一个新的列:

     

    在显示序号的列中输入相关的值:

     

    在此表达式的后面是Nothing,不是null,不要搞错。

     

    三项功能已经完成,预览:

     

    比原来漂亮吗?至少实用了一些。

    使用RDLC报表()--使用自定义数据集

    <!--[if !supportLists]-->1<!--[endif]-->新建窗体

     

    <!--[if !supportLists]-->2<!--[endif]-->建立数据源

     

    3<!--[endif]-->建立报表

     

    新的数据报表已经生成,下面开始对数据源进行设置。

    <!--[if !supportLists]-->4<!--[endif]-->对报表自动生成的数据源进行设置

    选择工具栏 à 报表 à 数据源,选中所要修改的数据源后,用重命名对其进行修改,如myds

     

    修改完成后,确定退出此窗口。

    选中报表设计器内的表格,显示属性。将表格的数据集名称更改为上面修改的名称。

     

    如果一个报表文件内只有一个数据源,则表格内的数据值可直接写为Fields!字段.Value”的格式,如果包含多个数据源,则要对此字段的取值进行指定,如“=(Fields!字段.value,“数据集名称””

    <!--[if !supportLists]-->5<!--[endif]-->手动生成数据源

    手动生成的数据集内必须包含报表文件内设计的字段名称,否则会运行出现错误。

    生成数据集:

         

      /// <summary>
    
            /// 报表执行操作
    
            /// </summary>
    
            /// <param name="sender"></param>
    
            /// <param name="e"></param>
    
            private void button1_Click(object sender, EventArgs e)
    
            {
    
                //取得数据集
    
                string connstring = "Data Source=.;Initial Catalog=Northwind;Integrated Security=True";
    
                System.Data.SqlClient.SqlConnection conn1 = new System.Data.SqlClient.SqlConnection(connstring);
    
                System.Data.SqlClient.SqlCommand command1 = new System.Data.SqlClient.SqlCommand("select * from customers", conn1);
    
                System.Data.SqlClient.SqlDataAdapter ada1 = new System.Data.SqlClient.SqlDataAdapter(command1);
    
                DataSet c_ds = new DataSet();
    
                try
    
                {
    
                    conn1.Open();
    
                    ada1.Fill(c_ds);
    
                }
    
                finally
    
                {
    
                    conn1.Close();
    
                    command1.Dispose();
    
                    conn1.Dispose();
    
                }
    
     
    
                //为报表浏览器指定报表文件
    
                this.reportViewer1.LocalReport.ReportEmbeddedResource = "report.Report1.rdlc";
    
                //指定数据集,数据集名称后为表,不是DataSet类型的数据集
    
                this.reportViewer1.LocalReport.DataSources.Clear();
    
                this.reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("myds", c_ds.Tables[0]));
    
                //显示报表
    
                this.reportViewer1.RefreshReport();
    
            }
    
     
    View Code

    运行后的数据显示:

     

    在使用报表向客户展示结果数据时,实时的在报表中显示某些特定的数据是必需的,如:显示的部门、打印的日期等。本文只简单的演示向报表内传入一个字符值。如有其它问题,欢迎讨论。

    1、新建一个工程TestReport,一个Form窗体,放入一个TextBox、一个Button按钮,再放入一个ReportViewer控件。
    2、在ReportViewer上选择新建一个报表
    3、在打开的报表设计器中,选择工具栏的报表中的报表参数,新加一个参数,名称为content,数据类型为string,确定。
    4、在报表设计器的页面上放入一个文本框,在文本框上按鼠标右键->属性,在文本框属性窗口中,选择常规选项卡内下部的后面的编辑表达式按钮(就是那个Fx),在此窗口内,左下框内选择参数,在右下框将会出现在上一步中设置的参数,双击此参数,在上面的框内将出现所需要的表达式:=Parameters!content.Value。保存此报表。报表默认名称为Report1.rdlc
    5、在Form窗体内双击按钮,编写如下代码:

             

       this.reportViewer1.LocalReport.ReportEmbeddedResource = "TestReport.Report1.rdlc";
                ReportParameter rp = new ReportParameter("content", this.textBox1.Text);
                this.reportViewer1.LocalReport.SetParameters(new ReportParameter[] { rp });
                this.reportViewer1.RefreshReport();
    View Code


    6、运行工程,在文本输入框内输入数据,按下按钮,数据是不是已经传入报表了?

    本文内以MSServer自带Northwind库文件内的CustomersOrders这两个表为例,建立两个报表文件,在查询得出Customers的表数据后,点击此表内的CustomerID数据,报表将转入至下一个报表,并显示与之相关的Orders的数据,VS中所谓的钻取式报表。

    1、打开一个工程,并新建一个From,放入一个Button及一个ReportViewer控件。
    2、在工程内新建一个数据源,连接到Northwind库文件,显示CustomersOrders这两个表
    3、新建一个报表文件,并以表格的形式来显示数据,将Customers表内的CustomerIDCompanyNameAddress三个字段放入,形成一份有表头及数据的简单报表,并将此报表保存命名为customerReport
    4、再建一个报表文件,与customerReport相同,也以表格的形式来显示报表,将Orders内的OrderIDCustomerIDShipNameOrderDate四个字段放入表格内,报表保存为orderReport
    5orderReport的数据源根据主报表customerReport的数据来确定数据源的数据,查看表格的数据集名称,我的显示为NorthwindDataSet_Orders,也可以自己另建一个,具体方法见我的《RDLC报表(二)》
    6、再打开customerReport报表,将CustomerID设置成为可点击的索引字段,以便转入下一个报表。选择CustomerID字段,按鼠标右键,在文本框属性窗口中,选择导航选项卡,在下面的超链接中选择跳至报表,在报表名称中选择”orderReport“,再按下后面的参数...“按钮,输入一个参数名称,如customerid,参数值选择=Fields!CustomerID.Value。为了与其它数据相区分,可以将此列数据根据自己的习惯改变颜色或加下划线
    7、在orderReport中,设置一个报表参数,与CurtomerReprot中的名称相同,以接收父表中传入的参数
    8、新建两个取得数据的方法,一个从Customers中取得数据集,另一个从Orders中取得数据集,且带参数。此两个方法可以自己编写类库来实现,也可以在VS的数据集内添加。为了演示方便,我直接使用了CustomersGetData(),并编写了一个OrdersGetDataByCustomerID(@cid)的方法。
    9、在FromButton中编写如下代码:

          

      private void button2_Click(object sender, EventArgs e)
            {
                NorthwindDataSet.CustomersDataTable dt1 = new NorthwindDataSetTableAdapters.CustomersTableAdapter().GetData();
                this.reportViewer1.LocalReport.ReportEmbeddedResource = "TestReport.customerReport.rdlc";
                this.reportViewer1.LocalReport.DataSources.Clear();
                this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("NorthwindDataSet_Customers", dt1));
                this.reportViewer1.RefreshReport();
            }
    View Code


    10、使用报表的Drillthrough事件,当选择了钻取项时会发生此事件,给下一个报表取值,代码如下:

          

      private void reportViewer1_Drillthrough(object sender, DrillthroughEventArgs e)
            {
                LocalReport lp = (LocalReport)e.Report;
                string customerid = lp.GetParameters()["customerid"].Values[0].Trim();
    
                lp.DataSources.Clear();
                lp.DataSources.Add(new ReportDataSource("NorthwindDataSet_Orders",
                    new NorthwindDataSetTableAdapters.OrdersTableAdapter().GetDataByCustomerID(customerid)));
            }
    View Code


    运到结果:
    运行第一份报表:


    钻取后运行第二份报表:

  • 相关阅读:
    10 个雷人的注释,就怕你不敢用!
    Java 14 之模式匹配,非常赞的一个新特性!
    poj 3661 Running(区间dp)
    LightOJ
    hdu 5540 Secrete Master Plan(水)
    hdu 5584 LCM Walk(数学推导公式,规律)
    hdu 5583 Kingdom of Black and White(模拟,技巧)
    hdu 5578 Friendship of Frog(multiset的应用)
    hdu 5586 Sum(dp+技巧)
    hdu 5585 Numbers
  • 原文地址:https://www.cnblogs.com/liuwj/p/3394259.html
Copyright © 2020-2023  润新知