最近一段时间开发ERP系统中要用到不少报表打印,在网上找了一圈发现想些好用的报表控件大部分要收费,一些面免费要么不好用要么IE8不兼容,最后还是用了微软自带的RDLC报表,把自己遇到的坑和技巧整理分享出来。

一般Visaul Studio上新建的的EDLC报表文件之后数据源都是按照向导直接连接数据库,自动生成数据源和数据集的,但是遇到一些复杂的就不够灵活。

一、新建报表

1.新建一个空白的报表如下

2.打开新建好的空报表文件,选择报表文件右键选择【打开方式】→【XML(文本)编辑】打开 在Page节点下面添加DataSources 和DataSets 节点

1)空报表文件

<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<Width>6.5in</Width>
<Body>
<Height>2in</Height>
</Body>
<rd:ReportTemplate>true</rd:ReportTemplate>
<Page>
</Page>
</Report>

2)添加节点后

<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<Width>6.5in</Width>
<Body>
<Height>2in</Height>
</Body>
<rd:ReportTemplate>true</rd:ReportTemplate>
<Page>
</Page>
<DataSources>
<DataSource Name="ProductOrderSource">
<ConnectionProperties>
<DataProvider>System.Data.DataSet</DataProvider>
<ConnectString>/* Local Connection */</ConnectString>
</ConnectionProperties>
<rd:DataSourceID>50f42c3f-789d-4967-8d8b-5dbe50b3a677</rd:DataSourceID>
</DataSource>
</DataSources>
<DataSets>
<DataSet Name="ProductOrderDs">
<Query>
<DataSourceName>ProductOrderSource</DataSourceName>
<CommandText>/* Local Query */</CommandText>
</Query>
<Fields>
<Field Name="ProductOrderId">
<DataField>ProductOrderId</DataField>
<rd:TypeName>System.Guid</rd:TypeName>
</Field>
<Field Name="SKUDetail">
<DataField>SKUDetail</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="Quantity">
<DataField>Quantity</DataField>
<rd:TypeName>System.Int32</rd:TypeName>
</Field>
<Field Name="DeliveryDate">
<DataField>DeliveryDate</DataField>
<rd:TypeName>System.DateTime</rd:TypeName>
</Field>
<Field Name="DeliveryDateActual">
<DataField>DeliveryDateActual</DataField>
<rd:TypeName>System.DateTime</rd:TypeName>
</Field>
<Field Name="Bak">
<DataField>Bak</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
<rd:DataSetInfo>
<rd:DataSetName>ProductOrderSource</rd:DataSetName>
<rd:TableName>ProductOrderDetail</rd:TableName>
<rd:TableAdapterGetDataMethod>GetData</rd:TableAdapterGetDataMethod>
</rd:DataSetInfo>
</DataSet>
</DataSets>
</Report>
DataSources:数据源名称标签,每次加一个新的数据源需要在 DataSources 标签下新标签DataSource
DataSets:数据实体集合,每次新添加一个数据源后在DataSets 对应添加新的DataSet节点,DataSourceName和DataSetName 要和DataSource 的Name 名称一致。Fields 下面是添加每个实体对应的字段

3.报表DataSource和DataSet建好后可以看到刚才添加的数据源和数据集

4.设计好需要额报表,填充刚才数据集里对应的字段

5.后台数据源赋值代码
   public ActionResult PrintProduct()
{
string reportPath = Server.MapPath("~/Reports/订单信息.rdlc"); var localReport = new LocalReport { ReportPath = reportPath }; List<ProductOrder> productOrders = new List<ProductOrder>(); for (int i = ; i < ; i++)
{
ProductOrder productOrder=new ProductOrder
{
SKUDetail = $"A00300000{i}",
Quantity = i,
DeliveryDate = DateTime.Now.AddDays(i).ToString("yyyy-MM-dd HH:mm:ss"),
DeliveryDateActual = DateTime.Now.AddDays(i+).ToString("yyyy-MM-dd HH:mm:ss")
};
productOrders.Add(productOrder); }
var dataSource = new ReportDataSource("ProductOrderDs", productOrders);
localReport.DataSources.Add(dataSource); var type = "PDF";
string reportType = type;
string mimeType;
string encoding;
string fileNameExtension; var deviceInfo = $"<DeviceInfo><OutPutFormat>{type}</OutPutFormat></DeviceInfo>"; Warning[] warnings;
string[] streams; var renderedBytes = localReport.Render(
reportType,
deviceInfo,
out mimeType,
out encoding,
out fileNameExtension,
out streams,
out warnings); return File(renderedBytes, mimeType);
}

实体代码:

 public class ProductOrder
{
public Guid ProductOrderId { get; set; }
public string SKUDetail { get; set; } public int Quantity { get; set; } public string DeliveryDate { get; set; } public string DeliveryDateActual { get; set; } public string Bak { get; set; }
}

注意:报表文件DataSet中的用到的字段必须和实体字段对应,代码中DataSource 中名字必须和报表中的一样

最后预览如下:

——当你的才华还撑不起你的野心时,你就应该静下心来好好学习~
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

RDLC系列(一)ASP.NET RDLC 报表自定义数据源的更多相关文章

  1. RDLC系列之二 子报表

    本文实现简单的子报表 一.效果图

  2. ASP.NET之报表--RDLC(一)---附源码

    听同事介绍到RDLC,之前有了解过报表,但是确实没什么放在心上.最近有空,就研究下了. 一.RDLC实现 1.步骤 (1)首先新建一个项目RDLCDemo (2)新建一个DataSet数据集,并且绑定 ...

  3. asp.net RDLC报表入门

    Asp.net RDLC 报表入门 这几天帮给同事讲解Asp.net RDLC 报表方面的知识,顺便做个简单教程,在这里分享给大家. 由于图片多又大,写了一半,光上传图片就把我累个半死,所以我教把程放 ...

  4. RDLC系列之一 简单示例

    参照文章:http://www.cnblogs.com/waxdoll/archive/2006/07/24/458409.html#!comments 一.效果图

  5. RDLC系列之一 简介和入门

    一.简介 RDLC报表,通过Report Viewer Control来实现,制作微软RDLC报表由以下三部分构成:1.制作自己的DateSet集合(就是报表的数据集):2.制作自己的报表文件.rdl ...

  6. ASP.NET Core MVC – 自定义 Tag Helpers

    ASP.NET Core Tag Helpers系列目录,共四篇: ASP.NET Core MVC Tag Helpers 介绍 ASP.NET Core MVC – Caching Tag Hel ...

  7. 【深入ASP.NET原理系列】--ASP.NET页面生命周期

    前言 ASP.NET页面运行时候,页面将经历一个生命周期,在生命周期中将执行一系列的处理步骤.包括初始化.实例化控件.还原和维护状态.运行时间处理程序代码以及进行呈现.熟悉页面生命周期非常重要,这样我 ...

  8. 【深入ASP.NET原理系列】--ASP.NET请求管道、应用程序生命周期、整体运行机制

    微软的程序设计和相应的IDE做的很棒,让人很快就能有生产力..NET上手容易,生产力很高,但对于一个不是那么勤奋的人,他很可能就不再进步了,没有想深入下去的动力,他不用去理解整个框架和环境是怎么执行的 ...

  9. 【Lucene3.6.2入门系列】第05节_自定义停用词分词器和同义词分词器

    首先是用于显示分词信息的HelloCustomAnalyzer.java package com.jadyer.lucene; import java.io.IOException; import j ...

随机推荐

  1. github的SSH配置如下

    Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置. github的SSH配置如下: 一 . 设置Git的user name和email: $ git ...

  2. iOS开发笔记 - 界面调试神器Reveal

    http://blog.csdn.net/jackfrued/article/details/50934092     Reveal是iOS开发工具中的神器之一,它能够在应用程序运行过程中调试应用程序 ...

  3. diff命令参数

    diff命令参数: diff - 找出两个文件的不同点 总览 diff [选项] 源文件 目标文件 描述 在最简单的情况是, diff 比较两个文件的内容 (源文件 和 目标文件). 文件名可以是 - ...

  4. js 匿名函数 json

    <script type="text/javascript"> var My_func = function(name){   this.obj_name=name; ...

  5. android dialog圆角显示及解决出现的黑色棱角.(友情提示)

    http://blog.csdn.net/jj120522/article/details/7871289 最近在开发一个天气预报的app,看到一个比较不错友情提示,如下:               ...

  6. handler的使用

    2014-04-15 10:45:06 简单学习了handler的使用. 昨天下载的问题,在手机上正常,在平板上不正常. 怀疑是网络的问题. 一直获得的流为空 2014-04-15 18:10:59 ...

  7. SVN下载分支、合并分支

    http://www.cnblogs.com/armyfai/p/3985660.html(不知道实际工作中怎么使用,有好多步骤感觉不是太理解) 从远处把库fork到本地,会有一个库文件夹 服务器库结 ...

  8. bug工具

    在线工具:柠檬bug管理--兼顾项目管理 开源工具:PPM Bug 缺陷管理系统 项目管理.bug管理:http://www.bugfree.cn

  9. C# Winform窗口之间传值的多种方法浅析(转)

    摘要http://www.jb51.net/article/63837.htm 这篇文章主要介绍了C# Winform窗口之间传值的多种方法浅析,本文起讲解了通过构造器传值.通过属性传递.通过事件携带 ...

  10. TortoiseSVN使用简介(收藏)

    TortoiseSVN使用简介 1.安装及下载client 端 2.什么是SVN(Subversion)? 3.为甚么要用SVN? 4.怎么样在Windows下面建立SVN Repository? 5 ...