当前位置: 首页 > news >正文

竭诚网络网站建设公司/大数据分析

竭诚网络网站建设公司,大数据分析,wordpress 显示pdf插件,武汉做网站需要多少钱在asp.net程序中,可以选择使用水晶报表,功能确实强大。但是web版的水晶报表好像存在版权的问题。如果所作报表不是复杂的一塌糊涂的话,可以使用微软自带的Rdlc报表。   Rdlc优点:  1:Rdlc报表设计简单  2&#x…

 在asp.net程序中,可以选择使用水晶报表,功能确实强大。但是web版的水晶报表好像存在版权的问题。如果所作报表不是复杂的一塌糊涂的话,可以使用微软自带的Rdlc报表。

  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();

  这个方法终于成功了。

  附:rdlc文件的xml一段结构

  xml结构

1<?xml version="1.0" encoding="utf-8"?>
2<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
3 <DataSources>
4 <DataSource Name="ConnectionString">
5 <ConnectionProperties>
6 <ConnectString />
7 <DataProvider>SQL</DataProvider>
8 </ConnectionProperties>
9 <rd:DataSourceID>073016a7-6cb0-4e06-a6fd-f5882a039188</rd:DataSourceID>
10 </DataSource>
11 </DataSources>
12 <BottomMargin>2.5cm</BottomMargin>
13 <RightMargin>2.5cm</RightMargin>
14 <PageWidth>21cm</PageWidth>
15 <rd:DrawGrid>true</rd:DrawGrid>
16 <InteractiveWidth>21cm</InteractiveWidth>
17 <rd:GridSpacing>0.25cm</rd:GridSpacing>
18 <rd:SnapToGrid>true</rd:SnapToGrid>
19 <Body>
20 <ColumnSpacing>1cm</ColumnSpacing>
21 <ReportItems>
22 <Chart Name="chart1">
http://www.lbrq.cn/news/1321561.html

相关文章:

  • 网站建设长春/今日新闻国内大事件
  • 微网站访问量/seo综合查询工具下载
  • wordpress插件改名/平台优化是什么意思
  • 静态网站源码下载/今日头条10大新闻
  • python做网站难么/青海网站seo
  • 邢台做wap网站费用/抖音搜索引擎推广
  • 网络公司是做什么/怎么做优化
  • 毕设做网站需要买域名么/网站推广策略有哪些
  • 旅游网站的功能/高级搜索技巧
  • 网站编辑如何做/营销软文范文
  • 日本亲子游哪个网站做的好/百度指数下载
  • 做静态网站的软件/中文域名交易平台
  • wordpress网页设计步骤/国内做seo最好公司
  • 花卉网站建设项目策划书/seo搜索引擎优化实训报告
  • 广德县住房和城乡建设网站/如何做网站网页
  • wordpress本地运行速度慢/西安专业seo
  • 综合返利商城网站建设/软文案例
  • 通辽做网站制作/外包网络推广公司怎么选
  • 怀化汽车网站/百度网站快速优化
  • java怎么做网站多语言/鲜花网络营销推广方案
  • 江门找人做网站排名/搜索引擎优化包括哪些内容
  • 芜湖炎黄做的网站/秦洁婷seo博客
  • wordpress360收录插件/关键词排名优化系统
  • 个人网站 模版 后台管理系统/网络推广的渠道
  • 我的电脑做网站服务器吗/免费网页在线客服系统
  • 环球资源网站什么时候做的/互联网推广有哪些方式
  • 公司网站建设征稿令/中国科技新闻网
  • 西宁网站建设哪家好/独立站网站
  • 静态网站开发课程相关新闻/专业排名优化工具
  • 用html制作旅游网站/seo网站搭建是什么
  • 网络层协议IP
  • 如何创建一个飞书应用获取自己的飞书AppID和AppSecret?
  • elk部署加日志收集
  • 微信小程序中实现页面跳转的方法
  • 数据结构【红黑树】
  • opencv 模块裁剪 按需安装指定模块