第一次使用rdlc做报表心得

好久没来,发现csdn blog大变样了,刷了几次,终于可以写字了,不容易呀!

一直以来,都在不停加班,难得今天没bug,赶紧跑回家!

 因为做个项目,可能要使用报表。原来以为只能用水晶报表,可是又要注册,那麽麻烦。反正要做的是简单的报表,也用不上那麽多功能。在网上搜搜搜,才发现原来2005已经有rdlc了。庆幸多亏当初做项目时,是用vs2005做的。

更多内容不累述,就说一下我从头做起遇到的问题和解决的方法,只适合初学者的。

   首先,按照网上说的,先做了一个DataSet1.xsd,准备做报表的数据源,这样拖字段也比较省力,结果一编译DataSet1.xsd这个文件就报错!我还一行代码没写呢,它就报错,难道因为我的数据表是中文的缘故?不懂,原来没用过这个,不晓得怎莫回事,还好不用这个也行,设计好报表,就把这文件删了,直接在代码里动态邦定数据源,看它还如何报错。

报表设计

  

 

 

 

 

 

 

 

 

 

 

  

 

 

 

 

  从来没做过rdlc报表,做的时候只能按照网上的图片想,建子报表时,怎莫也找不到报表参数,后来往vs的工具栏一看,原来在这里呀。“报表”-〉“报表参数”,我还一直在属性里找呢。

   报表都设计好了,可以写代码了,代码大致copy了一下,改一改,然后运行,不错,出来了。如果代码写的有问题,报表就会显示一片空白,也不报错。

   报表出来了,该看看打印了,toolbar上竟然没有打印按钮。要打印按钮还得做报表服务器,算了,能导出来打印也行。点导出pdf,竟然弹出ReportViewerWebControl.axd的窗口,之后点什莫都无法导出来。导出excel也是一样!数据源有问题?报表中有中文?都不是呀!搜了半天,原来是要设置ReportViewer的属性ExportContentDisposition=AlwaysInLine。这莫简单的问题,怎莫就是没人说呢?

   报表导出pdf也正常了。又发现一个问题:导出的数据都在奇数页里,偶数页都是空白页!因为我的报表至少要2页,如果只有一页的话,就没有这种问题。我把报表里的list拖拖拽拽,改变大小,位置,嵌套list,怎莫都不行。原来问题还是出在报表设计上,在vs菜单上,点“报表”-〉“报表属性”-〉“布局”,缩小左右边距。这回终于ok了。

  至此,终于做出了第一个报表,不容易呀!

贴一下源码:

  {

        string connstring = "...";
        string str1 ="... ",str2 = "...";

        System.Data.SqlClient.SqlConnection conn1 = new System.Data.SqlClient.SqlConnection(connstring);

        System.Data.SqlClient.SqlCommand command1 = new System.Data.SqlClient.SqlCommand(str1, conn1);

        System.Data.SqlClient.SqlDataAdapter ada1 = new System.Data.SqlClient.SqlDataAdapter(command1);


        try
        {
            c_ds.Tables.Add("account");
            c_ds.Tables.Add("accountDetails");
            conn1.Open();

            ada1.Fill(c_ds);

            ada1.Fill(c_ds.Tables["account"]);
            ada1.SelectCommand.CommandText = str2;
            ada1.Fill(c_ds.Tables["accountDetails"]);

        }

        finally
        {

            conn1.Close();

            command1.Dispose();

            conn1.Dispose();

        }
            ReportViewer1.ProcessingMode = ProcessingMode.Local;
           LocalReport localReport=new LocalReport();
     
           localReport = ReportViewer1.LocalReport;
           localReport.ReportPath = "Report1.rdlc";

           localReport.SubreportProcessing += new Microsoft.Reporting.WebForms.SubreportProcessingEventHandler(SubReportProcessingEventHandler);

           localReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("DataSet2_账单信息表",c_ds.Tables["account"]));


           localReport.Refresh();
    }
     private void SubReportProcessingEventHandler(object sender, Microsoft.Reporting.WebForms.SubreportProcessingEventArgs e)
     {

      e.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("DataSet2_账单细目表_小时", c_ds.Tables["accountDetails"]));
  
     }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值