在asp.net程序中,可以选择使用水晶报表,功能确实强大。但是web版的水晶报表好像存在版权的问题。
如果所作报表不是复杂的一塌糊涂的话,可以使用微软自带的Rdlc报表。
已经有老兄做出了不少诠释:
http://www.cnblogs.com/waxdoll/
更多资料可以在这里找到:
http://www.gotreportviewer.com/
Rdlc优点:
1:Rdlc报表设计简单
2:结果存成xml,易于控制
3:导出格式作的很不错
这里所说的动态控制报表所指的是:在一些时候,制作了报表之后希望在运行中可以动态的做一些小修改,比如说列的位置,用户控制显示那些列等等。
控制方法,尝试了这么几种:
1:控制微软提供的报表对象的属性;
2:报表全部自动生成
3:修改报表源文件,然后加载。
控制微软提供的报表对象的属性:基于这个功能需求,一开始我想到的方法是通过控制微软提供的这些报表对象的属性来实现。因为这种方法最人道了。但是事与愿违,微软的ReportViewer对象是用来显示Report的,自然不行;我使用的report是自己设计的,localReport,找到Report对象,里面方法有这个几个:report.GetDefaultPageSettings();report.GetDocumentMap()等,第一个是获取打印纸张德设置,第二个是获取doc文档(但是始终出错),都是只读属性;所以,第一种尝试失败。
第二种方法就是报表全部自动生成。可以找到一个完整的例子,在这里:
http://www.gotreportviewer.com/DynamicTable.zip
这个例子里面,他把xml结构的rdlc报表写成一个类ReportDefinition,然后通过自定义这个类的内容来得到一个报表。其实际还是为了自己构造一个报表对象的xml。这是加载自定义报表的过程:win下的代码
this.reportViewer1.Reset();
this.reportViewer1.LocalReport.LoadReportDefinition(m_rdl);
this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("MyData", m_dataSet.Tables[0]));
this.reportViewer1.RefreshReport();
这是自动生成xml的代码:
private MemoryStream GenerateRdl(List<string> allFields, List<string> selectedFields)
{
MemoryStream ms = new MemoryStream();
RdlGenerator gen = new RdlGenerator();
gen.AllFields = allFields;
gen.SelectedFields = selectedFields;
gen.WriteXml(ms);
ms.Position = 0;
return ms;
}
这是完全ReportDefinition的一部分定义:
namespace Rdl {
using System.Xml.Serialization;
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition", IsNullable=false)]
public partial class Report {
private object[] itemsField;
但是几经考虑之后,这个方案也不让人满意,原因是:所有的报表对象都得自己生成,一下子回到了解放前,没有可视化工具的设计既繁琐又复杂。特别是如果设计几个line,然后再来上几个分组的话,工作量巨大。
于是乎尝试第三种方法:ReportVivwer加载报表前在内存中修改报表源文件。这个方法比较狠,其实可以解决很多问题,包括设计自定义的打印纸张等(这里有另外一种设置打印纸张的方法
http://waxdoll.cnblogs.com/archive/2006/03/03/342435.html)。
设计思路是:首先加载rdlc文件到一个XmlDocument对象;然后修改xml内容;把xml序列化成字节流,交给ReportViewer显示。
这是这一段代码:
public MemoryStream GenerateRdlc()
{
XmlDocument sourceDoc = new XmlDocument();
string path = AppDomain.CurrentDomain.BaseDirectory + "Test/OrderList.rdlc";
sourceDoc.Load(path);
Hashtable reportColumns = GetReportColumns(sourceDoc.LastChild);
//just remove
for (int i = 0; i < reportColumns.Count; i++)
{
if (!FindReportCoulmns(reportColumns[i].ToString()))
{
RemoveColumnFromRdlc(sourceDoc.LastChild, i);
}
}
MemoryStream ms = new MemoryStream();
XmlSerializer serializer = new XmlSerializer(typeof(XmlDocument));
serializer.Serialize(ms, sourceDoc);
ms.Position = 0;
return ms;
}
至于如何GetReportColumns和RemoveColumnFromRdlc,那就很简单了,就是一个操作xml对象的过程。比方说
private Hashtable GetReportColumns(XmlNode root)
{
Hashtable cols = new Hashtable();
//XmlNamespaceManager s=new XmlNamespaceManager(
XmlNode cells = FindChildNode(root,"Body/ReportItems/Table/Header/TableRows/TableRow/TableCells");
for (int i = 0; i < cells.ChildNodes.Count; i++)
{
XmlNode cell =FindChildNode( cells.ChildNodes[i],"ReportItems/Textbox/DataElementName");
cols[i] = cell.InnerText;
}
return cols;
}
这是使用这一段的代码
this.ReportViewer1.LocalReport.LoadReportDefinition(this.Report.GenerateRdlc());
this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", result.Tables[0]));
this.ReportViewer1.LocalReport.Refresh();
分享到:
相关推荐
ASP.NET中的RDLC报表是一种微软提供的轻量级报表解决方案,特别适合在Web应用程序中使用,尤其是在需要避免版权问题或不需要复杂报表功能时。相对于水晶报表,RDLC(Report Definition Language for Reporting ...
4. **动态数据源绑定**:在Asp.net代码中,使用`LocalReport`对象来实例化RDLC报告,并在运行时动态设置数据源。例如,你可以使用`ReportDataSource`类来创建数据源对象,然后通过`LocalReport.DataSources.Add()`...
通过学习这些文档,你不仅可以了解如何在ASP.NET环境中使用RDLC报表,还能掌握如何与各种数据源交互,以及如何创建动态、交互式的报表来满足业务需求。理解并熟练运用这些知识,对于开发出具有强大数据展示能力的Web...
本示例将探讨如何在ASP.NET MVC应用程序中集成和使用RDLC报表。 首先,我们需要了解MVC的基本组成部分。模型(Model)负责处理业务逻辑和数据管理,视图(View)负责显示用户界面,控制器(Controller)则处理用户...
ASP.NET中的RDLC报表是一种基于微软技术的报表生成工具,全称为Report Definition Language for Client-Side Processing。在Visual Studio .NET 2005及之后的版本中,RDLC报表得到了广泛的应用,作为对水晶报表...
- 在RDLC报表中,可以使用表达式进行复杂的计算和逻辑判断。例如,计算字段、聚合函数(SUM、AVG、COUNT等)、条件语句(IF...THEN...ELSE...)等。 - 表达式通常用于计算值、过滤数据、设置样式等,增强了报表的...
综上所述,ASP.NET的RDLC报表提供了丰富的功能,使得在Web应用中创建动态、交互式的报表变得简单。通过学习和实践这些代码实例,你可以有效地在你的项目中实现各种报表需求。在RDLC_Demo文件中,你可能找到具体的...
总的来说,ASP.NET的RDLC报表提供了一种灵活、直观的方式来生成动态数据报告,适用于各种业务需求。官方实例和文档将帮助开发者更好地理解和掌握这项技术,从而提升项目的报告功能。通过深入学习和实践这些示例,你...
在实际应用中,动态生成RDLC报表不仅可以满足实时数据展示的需求,还可以根据用户权限和筛选条件动态调整报表内容,提高用户体验。同时,由于RDLC报表支持离线查看,它在离线应用或移动应用中也有广泛的应用。 总的...
要在RDLC报表中生成条形码和二维码,你需要引入第三方库,如BarCode Rendering Framework或Zxing.Net。这些库提供了条形码和二维码控件,可以在报表设计时添加并配置。通过设置控件属性,如数据源、类型和大小,...
3. **表达式**:RDLC报表支持表达式,允许在报表中进行计算、逻辑判断和数据转换。例如,可以使用表达式来计算总和、平均值或者根据条件改变文本颜色。 4. **交互性**:RDLC报表提供了交互性功能,用户可以对报表...
RDLC报表是微软提供的一种用于在Windows Forms和ASP.NET应用程序中创建和展示报表的解决方案。在本示例中,"RDLC报表绑定到数据集的简单使用.zip" 文件旨在演示如何将RDLC报表与数据集相结合,以显示虚拟人物的消费...
这个项目可能包含了一些示例代码,展示如何在RDLC报表中动态生成表格、图表或其他报表元素,以及如何处理变化的数据结构。 **RssNewsReader** RssNewsReader可能是一个使用RDLC报表展示RSS新闻源的示例应用。通过...
***中动态生成RDLC报表是一个需要深入理解微软ReportViewer控件、RDLC报表设计和C#编程的高级话题。以下详细阐述了与标题和描述中提到的知识点相关的内容: 1. ReportViewer控件的作用:ReportViewer是***中用于...
3. **RDLC报表**:RDLC是微软的客户端报表定义语言,允许开发者在WinForms或ASP.NET应用中创建和显示报表。它可以在运行时根据数据动态生成报表,且无需服务器端的 Reporting Services。 4. **SQLDBA**:SQL ...
**Rdlc报表设计器——ReportViewer报表设计的得力助手** 在IT行业中,数据可视化是至关重要的,而报表则是数据展现的重要方式。`Rdlc`( Reporting Services Report Definition Language Client-Side)报表设计器...
在rdlc报表中,你可以使用表达式、编程逻辑(如C#或VB.NET)来动态决定表格的列数、行数甚至是样式。这使得报表能够适应不断变化的需求,提高灵活性。 5. **示例项目** - **InteractiveSort**: 这个示例展示了如何...
7. **服务器集成**:在ASP.NET环境中,RDLC报表可以与Reporting Services服务器集成,实现报表的集中管理和发布,便于权限控制和报表订阅。 8. **客户端呈现**:RDLC报表还支持在客户端呈现,这样用户无需服务器...
ASP.NET RDLC报表是微软开发的一种用于在ASP.NET应用程序中创建和展示报表的技术。它基于SQL Server Reporting Services (SSRS)的Report Definition Language (RDL)格式,但可以直接在Web应用程序中运行,无需服务器...