您的位置:首页 > 其它

微软rdlc报表讨论与制作

2015-07-29 15:14 281 查看
终于有东西可以写了,在此把在做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" onclick="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>

寄语:我希望每个看见这个文章的同学,能够看了此篇之后,自己研究得出一些新的东西,把它写下来,方便更多人!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: