ASP.NET RDLC 报表开发详解
原来写过的,当时不会上传图片,对不住各位。现在重整理了一下,有图,比较详细。
RDLC 报表开发
打开Visual Studio 2005
新建ASP.NET 网站
添加数据集
会自动调出数据集配置窗口TableAdapter
如果上面的窗口没有自动调出,可以如下图
可以调出上面的TableAdapter 窗口
新建立数据库连接
下面的这一步会将数据库连接保存到config 文件中
下面的这一步可以,选择生成SQL的方式
让我们先回到SQL Server Query Analyzer
打开SQL Server 查询分析器
创建如下图的存储过程
然后回到 Visual Studio 2005
选择使用现在的存储过程,下一步
这里,我们只需要选择所需要的存储过程,如刚才建立的EmployeeReport 即可
点击 完成。完成TableAdapter向导的配置.
添加报表项
拖动一个Table 到报表设计器中
选择网站数据集中的字段,把它拖动到表格的列中
新建立一个ASPX页面,拖动一个Report Viewer控件到页面中
在ReportViewer任务窗口中,选择刚才建立的rdlc文件
生成解决方案,然后执行
看到结果,报表执行完成
至此报表开发成功。
注意
1. 刚才的SQL 脚本
CREATE PROC EmployeeReport
AS
SELECT * FROM Employee
GO
实际的报表开发中,一定不要用SELECT * ,只取报表中需要查看的字段。
2. 有时候,可能需要用户选择一些条件,有选择性的查看报表。而不是全部绑定数据
如上图,用户可能只需要查看2008-9-29至2008-9-30时间段之间的数据
则作法如下
先建立好如上图的ASPX页面,在View Report 事件中写如下的程序
ReportViewer1.LocalReport.ReportPath = AppDomain.CurrentDomain.BaseDirectory + "/Report/Request.rdlc";
DateTime dtFrom =Convert.ToDateTime(txtDateFrom.Text);
DateTime dtTo =Convert.ToDateTime(txtDateTo.Text);
string requester = txtRequester.Text;
string dept = txtRequestDept.Text;
string material = ddlMaterial.SelectedValue;
string iprstatus = ddlStatus.SelectedValue;
DataTable reqrpt = ReportDB.RequestReport(dtFrom, dtTo, material, dept,requester, iprstatus);
if (reqrpt != null)
{
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(
new Microsoft.Reporting.WebForms.ReportDataSource("Request_RequestReport", reqrpt));
ReportViewer1.LocalReport.Refresh();
}
ReportViewer1.LocalReport.Refresh();
根据用户所选的参数,把数据值传到SQL语句中即可.下面是RequestReport方法的源码
DataTable RequestReport(DateTime dtFrom, DateTime dtTo, string pMaterial, string pDept, string pRequester, string pIPRStatus) {
string MySQL = Purchase;
string whDate = " RequestDate BETWEEN '{0}' AND '{1}' ";
MySQL = MySQL + string.Format(whDate, dtFrom, dtTo);
string whMaterial = " AND MaterialCode='{0}' ";
if (pMaterial != "ALL")
{
MySQL = MySQL + string.Format(whMaterial, pMaterial);
}
string whDept = " AND RequestDepartment='{0}' ";
MySQL = MySQL + string.Format(whDept, pDept);
string whRequester=" AND Requester='{0}' ";
if(pRequester!="ALL")
MySQL = MySQL + string.Format(whRequester, pRequester);
string whIPRStatus = " AND IPRStatus={0} ";
if (pIPRStatus != "ALL")
{
MySQL = MySQL + string.Format(whIPRStatus, pIPRStatus);
}
IDataProvider privider = DataProvider.CreateDataProvider();
DataSet ds = privider.RetriveDataSet(MySQL);
if (ds != null && ds.Tables.Count > 0)
return ds.Tables[0];
else
return null;
}
const string Purchase="SELECT SerialNO,LedgerAcc,CostCenter,Requester,"+
" RequestDate,RequestDepartment,MaterialCode, " +
" Brand,Specifications,Unit,Quantity,Usage, "+
" ExpectedDeliveryDate,Currency "+
" ,Quotation1Supplier,Quotation1UnitPrice,Quotation1Amount, "+
" Quotation2Supplier,Quotation2UnitPrice,Quotation2Amount, "+
" Quotation3Supplier, Quotation3UnitPrice, Quotation3Amount, "+
" ProposedQuotationSupplier, ProposedQuotationUnitPrice, "+
" ProposedQuotationAmount,QuotationRemarks ,IPRStatus,QtyTo, UnitPriceTo FROM IPR WHERE ";
3. 设计报表时,可以用上述的方法,实际运行时,可以替换成SQL 语句,传到ReportDataSource中即可,只要相当的表结构字段是存在的。
4. 报表的定义是XML结构的,如果熟悉报表的定义格式规范,可以用文本编辑器打开直接修改。
5. 如果采用SQL Server 2005的服务器端报表,可能还会有进一步的方便设计和开发的地方.这里采用的是.net framework的组件,客户端只需要安装.net framework2.0即可,无需安装额外的组件.
原文连接如下