网站开发未按合同约定开发时间完工,网站做反向代理后样式加载错误,免费的工程信息网站,新版新白娘子传奇小青最后和谁在一起了上一篇介绍了客户端报表的基本开发。此篇讲介绍如何给客户端报表自定义开发数据源。 通过上一篇我们知道可以通过Dataset的方式给报表添加数据源#xff0c;这种方式通过UI操作的方式相对来说比较简单。此外我们也可以通过其它方式为客户端报表提供数据源#xff0c;使数据的…上一篇介绍了客户端报表的基本开发。此篇讲介绍如何给客户端报表自定义开发数据源。 通过上一篇我们知道可以通过Dataset的方式给报表添加数据源这种方式通过UI操作的方式相对来说比较简单。此外我们也可以通过其它方式为客户端报表提供数据源使数据的组织更灵活。下面将介绍通过项目代码的方式为报表提供数据源。 回顾第三篇我们建立的SSRS报表它的数据集的结构 首先基于上一篇建立的asp.net项目的基础上添加一个类这个类的结构将跟上面报表数据集中的结构一模一样。右键项目名称然后Add-New Item… 左侧选择Code右侧选择Class为项目添加一个类。 打开创建的类文件将里面的代码全部替换成 using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace WebApplication3 { public class ReportItem { public string ProductCategory { get; set; } public string ShipDate { get; set; } public double ProductStandardCost { get; set; } public double SalesAmount { get; set; } public double TaxAmount { get; set; } } } 可以看到这个类结构的定义和先前 SSRS报表的数据集结构是一样的。 接下来再在这个文件中加入另外一个类ReportTools用来暴露公共方法为客户端报表提供数据。 public class ReportTools { public ListReportItem GetReport(string Year) { ListReportItem result new ListReportItem(); SqlConnection conn new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings[AdventureWorksDW2012ConnectionString].ConnectionString); conn.Open(); StringBuilder sb new StringBuilder(); sb.AppendLine(SELECT ST.EnglishProductSubcategoryName AS ProductCategory); sb.AppendLine(,LEFT([ShipDateKey],6) AS [SHIPDATE]); sb.AppendLine(,SUM([ProductStandardCost]) AS [ProductStandardCost]); sb.AppendLine(,SUM([SalesAmount]) AS SalesAmount); sb.AppendLine(,SUM([TaxAmt]) AS [TaxAmt]); sb.AppendLine(FROM [AdventureWorksDW2012].[dbo].[FactInternetSales] F); sb.AppendLine(LEFT JOIN [dbo].[DimProduct] P ON F.ProductKeyP.ProductKey); sb.AppendLine(LEFT JOIN [dbo].[DimProductSubcategory] ST ON P.[ProductSubcategoryKey]ST.[ProductSubcategoryKey]); sb.AppendLine(WHERE LEFT([ShipDateKey],4) Year); sb.AppendLine(GROUP BY ST.EnglishProductSubcategoryName, LEFT([ShipDateKey],6)); SqlCommand comm new SqlCommand(sb.ToString(), conn); SqlDataReader dr comm.ExecuteReader(); while (dr.Read()) { ReportItem ri new ReportItem(); ri.ProductCategory dr[0].ToString(); ri.ShipDate dr[1].ToString(); ri.ProductStandardCost Convert.ToDouble(dr[2]); ri.SalesAmount Convert.ToDouble(dr[3]); ri.TaxAmount Convert.ToDouble(dr[4]); result.Add(ri); } dr.Close(); conn.Close(); return result; } } 这段代码主要是讲SQL语句的结果装在到List集合类里。 为客户端报表添加完提供数据源的方法后需要将项目编译一下这样后续的客户端报表工具就可以检测出新创建的数据结构。 然后添加另外一张客户端报表。 为报表添加一个数据集 在数据集属性界面中数据源直接选择项目的名称然后在Available datasets: 选择刚才建立的方法ReportTools(GetReport)。 可以看到检测出的数据结构跟 在SSRS下是一样的。 接下来参照第三篇中的方法设计报表。 下面为这个报表创建一个承载它的asp.net页面并且为它添加ScriptManager控件以及ReportViewer控件选择此篇新建立的报表。 随后系统为其自动生成了一个ObjectDataSource控件。 为页面添加一个DropDownList控件。 点击DropDownList控件向右的箭头点击Edit Items… 为控件手动添加一些值。 点击OK关闭ListItem编辑器回到设计界面。 选择DropDownList控件在属性列表里修改AutoPostBack的属性为True。 DropDownList控件相关设置完毕点击ObjectDataSource向右的箭头选择Configure Data Source… 数据源配置界面直接点Next。 可以看到系统检测到了报表中配置的方法直接点击Next。 由于方法为报表数据源指定了一个参数所以这里需要指定通过什么方式为数据源传进参数。 这里在参数源选择Control ,也就是指定参数的值是通过控件的值传入的。在ControlID指定刚才加入的DropDownList控件。 点击Finish完成数据源控件的配置。 最后回到 aspx页面的Source视图更改 ReportViewer控件的属性ReportPath并且将默认的报表属性去掉 接下来将新建的asp.net页面设置成开始页面然后点击F5运行。 可以看到效果跟SSRS服务器端报表是一样的。 通过最近两篇对客户端报表的介绍相信大家对客户端报表已经有了一个了解。一定程度上来说在你不想去单独部署和维护一个报表服务的前提下客户端报表确实是一个不错的选择方案。而且借助Coding的方式数据的生成相对来说也更随意一些比如从分析服务中加载数据到客户端报表中也可以参考我先前的一篇随笔 http://www.cnblogs.com/aspnetx/archive/2012/06/20/2556916.html