RDLC报表是微软⾃家的报表,已经集成在vs2010中,相对⽔晶报表更轻量级,更重要的是:可直接在web项⽬中使⽤。
使⽤步骤:
⼀、创建DataSet
右击->Add New Item-> DataSet(本例中命名为DS_EMP),会出现以下界⾯:
然后右击->Add->DataTable,添加⼀个表,命名为T_EMP,然后添加⼆个列EMPNO,EMPNAME均为String型,完成后的样⼦类似下现这样: 注:如果机器上安装了BizTalk,DataSet打开后,可能是下⾯这样
这种编辑⽅式我个⼈觉得不⽅便,可以通过在DS_EMP.xsd上右击-->Open With,然后在弹出界⾯中,把DataSet Editor设置成默认编辑器。
⼆、创建RDLC报表
项⽬右击->Add New Item -> Report,添加报表,命名为Report_EMP.rdlc,这时会出现报表编辑界⾯,
从⼯具箱中拖⼀个Table到报表空⽩区
这时会弹出⼀个选择DataSet的界⾯:
选择DS_EMP,然后点击"OK"关闭,这时报表布局上会出现⼀个⽹格
注:通常这个界⾯在绝⼤多数情况下,Data Source下拉框⾥并不能识别出当前项⽬中的数据集。这时,需要在解决⽅案rdlc⽂件上右击-->Open With-->XML(Text) Editor,直接编辑rdlc⽂件(报表rdlc⽂件其实就是⼀个xml),然后将以下内容插⼊到<Body>节点前 <DataSources>
<DataSource Name="DS_EMP">
<ConnectionProperties>
<DataProvider>System.Data.DataSet</DataProvider>
<ConnectString>/* Local Connection */</ConnectString>
</ConnectionProperties>
<rd:DataSourceID>d01eef15-1518-4df0-a45a-a17d24570e3a</rd:DataSourceID>
</DataSource>
</DataSources>
<DataSets>
<DataSet Name="T_EMP">
<Fields>
<Field Name="EMPNO">
<DataField>EMPNO</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="EMPNAME">
<DataField>EMPNAME</DataField>
韩金凤<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
<Query>
<DataSourceName>DS_EMP</DataSourceName>
<CommandText>/* Local Query */</CommandText>
</Query>
<rd:DataSetInfo>
<rd:DataSetName>DS_EMP</rd:DataSetName>
<rd:SchemaPath>App_Code\DS_EMP.xsd</rd:SchemaPath>
<rd:TableName>T_EMP</rd:TableName>
<rd:TableAdapterFillMethod />
<rd:TableAdapterGetDataMethod />
<rd:TableAdapterName />
</rd:DataSetInfo>
</DataSet>
</DataSets>
注:<rd:SchemaPath>App_Code\DS_EMP.xsd</rd:SchemaPath> 这个节点中的SchemePath最好设置成相对路径,否则多⼈团队开发时,如果其它⼈跟你本机的物理路径不⼀致,DataSet定义有变化后(⽐如新增加了字段),在报表设计的Report Data⾯板中,⽆法通过右键->Refresh刷新DataSet. 然后再以正常⽅式双击rdlc报表打开即可看到左侧Report Data⾯板中多了⼀个数据集
⿏标定位到单元格上,注意右上⾓有⼀个⼩图标(如上图),点击这个图标,能列出数据集中的字段 将需要打印的列依次添加进来
再稍做些修饰,⼀个简单的报表设计就算完成了
三、将报表嵌⼊到⽹页中
创建⼀个aspx页,拖放⼀个ReportViewer到页⾯上,然后再拖放⼀个ScriptManager到页⾯上,最终
的代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="/1999/xhtml">
<head runat="server">
<title></title>
</head>
火药爆炸<body>
<form id="form1" runat="server">
<div>
<rsweb:ReportViewer ID="ReportViewer1" runat="server" Width="100%" Height="100%">
</rsweb:ReportViewer>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
</div>
</form>
</body>
</html>
同时fig中也会发⽣⼀些变化:
<?xml version="1.0"?>
<!--
For more information on how to configure your ASP.NET application, please visit
go.microsoft/fwlink/?LinkId=169433
-->
<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="Reserved.ReportViewerWebControl.axd" type = "Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> </httpHandlers>
埃菲尔铁塔沉思
<compilation debug="true" targetFramework="4.0">
<assemblies>hbs
<add assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="Microsoft.ReportViewer.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
</assemblies>
</compilation>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
</system.web>
</configuration>
主要是system.web/httphandlers 以及 assemblies节点下多了⼀些内容
最后在default.aspx.cs⾥⽤代码弄点数据出来
using System;
using System.Data;
using Microsoft.Reporting.WebForms;
美术馆旁边的动物园public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
FillDataToReport();
}
}
void FillDataToReport()
{
//造⼀些⽰例数据
DataTable dt = new DataTable();
dt.Columns.Add("EMPNO", typeof(string));
dt.Columns.Add("EMPNAME", typeof(string));
dt.Rows.Add("000", "菩提树下的杨过");
dt.Rows.Add("001", "张三");
dt.Rows.Add("002", "李四");
dt.Rows.Add("003", "王五");
//指定加载哪个报表,并填充数据
this.ReportViewer1.LocalReport.ReportPath = "Report_EMP.rdlc";
this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("T_EMP", dt)); }
}
浏览⼀下页⾯,就能看到在线报表了: