微软rdlc报表讨论与制作

终于有东西可以写了,在此把在做rdlc报表中过程中遇到的一些问题记录下来,希望和我当时一样迷惑的盆友能够迅速入门和开发,本人的项目是Asp.net,我发现这方面的资料很少,虽然与winform有很多相似,但毕竟不是完全相同,在这个项目中用到的easyui和异步加载等技术,在此过程中遇到的问题在本文同样有解决之道!(动态加载数据源)

接下来说一下步骤:

1)第一明确自己的报表要求,需要的字段,因为我们自己设置数据源,我的建议先设计DataSet1.xsd文件,单击项目右键->添加->新建项->数据->DataSet.xsd文件

建立之后,在界面单击右键->表->然后设置字段!(最好把Dataset.xsd 放置根目录下,方便rdlc文件找到)

图片(1):


2)新建一张rdlc报表,在此过程中发现不能找到数据源添加的定义,解决方法,在视图中-》报表数据(Vs2010)然后-》新建数据集-,数据源选择DataSet1,然后点击OK,就完成了!在设计过程中有时候需要输入参数如日期或者其他参数,

这时可以在右侧的报表数据中的参数中-》单击右键添加参数(把允许为Null和允许为空白值勾上),下面就可以设置报表了!


上面日期后面的就是自定义的参数 ,制表日期是采用rdlc报表中的函数,在制表日期后面放入一个文本框,然后单击文本框右键-》表达式-》=now().toShortday();可以先输入now()然后点会自动弹出方法。

下面是一条黑线,可以在工具栏中,选择折线图,然后拉直。

接下来,在下面放入一个表-,在表中的标题处,填写个字段的名称,数据可以选择自动,这个很简单。这些做完了!恭喜你一个rdlc文件做好了,如果要好看,自己可以美化!


2)下面讲解如何使用Rdlc报表,新建一个页面!如图:


2.1)在改图中使用了easyui和异步加载技术(<asp:scriptmanager>必须要添加,否则,reportview报错!)在使用<asp:updatepanel >时发现easyui中日期不能正常显示,变成了一个普通文本框,查询资料发现原来加载时的顺序问题解决方法如下:

<code>

  <script type="text/javascript">

        function reload() {
            Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
        }

        function EndRequestHandler() {

            // easyui 重新渲染updatepanel1
            $.parser.parse($('#panel1').parent());//panel1 为<asp:updatepanel >的ID
        }

        $(function () {
            reload();
        }); 
    </script>

</code>

这段代码就可以解决easyUI在异步加载中的失效问题。下面就添加一个reportview,单击右侧找到rdlc报表!(在说一下reportview的Style,Width="100%"时,reprotview 就无缝衔接页面!)

给出界面代码:

<code>

<head runat="server">
    <title>报表</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link href="../Scripts/icon.css" rel="stylesheet" type="text/css" />
    <link href="../Scripts/default/easyui.css" rel="stylesheet" type="text/css" />
    <script src="../Scripts/jquery-1.4.2.min.js" type="text/javascript"></script>     
    <script src="../Scripts/Cookie.js" type="text/javascript"></script>
    <script src="../Scripts/jquery.easyui.min.js" type="text/javascript"></script>
    <script src="../Scripts/jquery.easyui.min.1.2.2.js" type="text/javascript"></script>
    <script src="../Scripts/easyui-lang-zh_CN.js" type="text/javascript"></script>
    <script type="text/javascript">
        function reload() {
            Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
        }

        function EndRequestHandler() {
            // easyui 重新渲染updatepanel1
            $.parser.parse($('#panel1').parent());
        }

        $(function () {
            reload();
        }); 
    </script>
    <style type="text/css">
        .style1
        {
            height: 25px;
        }
    </style>
</head>
<body style="margin-top:5px;margin-left:5px">
    <form id="form1" runat="server">
    <div >
     <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
    <div id="search" class="easyui-panel"title="查询条件"  collapsible="true" >
     <asp:UpdatePanel ID="panel1" runat="server">
        <ContentTemplate>
    <table border="0" cellpadding="0" cellspacing="2">
    
    <tr>
     
        <td class="style1">日期:</td><td class="style1">
      
        <input class="easyui-datebox" id="date1" data-options="sharedCalendar:'#cc'" style="width:120px" runat="server" >到
   <input class="easyui-datebox" data-options="sharedCalendar:'#cc'" style="width:120px"  id="date2" runat="server" >
    
   </td>
   <td><asp:RadioButton ID="rad_any" runat="server" Text="任意" checked="true"
        GroupName="report" /></td>
<td class="style1"><asp:RadioButton ID="rad_day" runat="server" Text="日报表" 
        GroupName="report" AutoPostBack="true" 
        oncheckedchanged="rad_day_CheckedChanged"/></td>
        <td class="style1"><asp:RadioButton ID="rad_week" runat="server" GroupName="report" 
                Text="周报表" AutoPostBack="true" 
                oncheckedchanged="rad_week_CheckedChanged" /></td>
<td class="style1"><asp:RadioButton ID="rad_mon" runat="server" Text=" 月报表" 
        GroupName="report"  AutoPostBack="true" 
        oncheckedchanged="rad_mon_CheckedChanged"/></td>
        <td class="style1"><asp:RadioButton ID="rad_year" runat="server" Text="年报表" 
                GroupName="report" AutoPostBack="true" 
                oncheckedchanged="rad_year_CheckedChanged" /></td>
<td >
    <asp:Button ID="btn_search" runat="server" 
      Text="查询" Height="18px" Width="41px" οnclick="btn_search_Click"  /></td>
 
</tr>
    </table>
   </ContentTemplate>
        </asp:UpdatePanel>
        </div>
    <div>
 
    <table border="0" cellpadding="0" width="100%">
    <tr><td style="width:100%">
        <rsweb:ReportViewer ID="ReportViewer1" runat="server" Height="310px" 
            Width="100%" Font-Names="Verdana" Font-Size="8pt" InteractiveDeviceInfos="(集合)" 
            WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt">
            <LocalReport ReportPath="Report\Report.rdlc">
            </LocalReport>
        </rsweb:ReportViewer>
        ;</td></tr>
    </table>
    </div>
    </div>
    </form>
</body>
</html>

</code>




2.2)一个界面就设计完成了,为何把这段代码放上来,是这样的,前段时间研究easyui发现在vs2010 asp.net 中有很多问题,本打算写一篇文章,但是发现自己只是能使用,并不太会,使用时常常出现意想不到的的问题,因此在此供上代码(vs2010中)!

3)工作快要到结尾了,就是后台代码(这是绑定报表数据源的函数,用sql语句生成DataTable,参数传入进去就可以了!)

<code>

 protected void bindreport(DataTable dt,string d1,string d2)
        {


            this.ReportViewer1.LocalReport.DataSources.Clear() ;//此句很重要,如果没有第二次查询 rdlc就不会刷新,显示新数据!
           // this.ReportViewer1.LocalReport.ReportPath = "Report/Report.rdlc";
            this.ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("DataSet1", dt));
            ReportParameter rp = new ReportParameter("ReportParameter1", d1);//rdlc中的自定义参数
            ReportParameter rp2 = new ReportParameter("ReportParameter2", d2);
            //ReportParameter rp3 = new ReportParameter("ReportParameter3", count);
            this.ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { rp, rp2 });
            
            //报表缩放,随页宽改变
            this.ReportViewer1.ZoomMode = ZoomMode.PageWidth;
            this.ReportViewer1.LocalReport.Refresh();
        }

</code>



寄语:我希望每个看见这个文章的同学,能够看了此篇之后,自己研究得出一些新的东西,把它写下来,方便更多人!






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值