2014年在做项目的时候, 过用过RDLC, 之后便在没有使用过了. 最近又有项目使用rdlc, 感觉有些陌生,然后重新阅读了以前的笔记,想做一下整理.

常见问题:

1. 为什么rdlc报表出来的pdf, 最后面有一页空白页?

2.有2个或多个数据源, 怎么样设置和绑定?

3.有一个表格, 里面还有一个表格, 如何做排版,使上下表格排版各自独立.

一.为什么rdlc报表出来的pdf, 最后面有一页空白页?

有的时候, 并不是下面的长度问题, 而是宽度问题,  右键=>视图=>标尺 宽度不超过16,基本A4 不会有空白页.

二.有2个或多个数据源,怎么设置绑定.

我们知道, 新建一个rdlc,里面拖入一张表,会要求创建一个数据源, 然后再拖入第二章表...诶,发现没有创建数据源选项,

有一种是先建数据源,一个字段一个字段的添加, 然后再去绑定, 我觉得这样做特别麻烦, 因为字段很多,改起来也是相当麻烦.

经过研究, 个人认为以下方式, 比较快速,而且也方便.

步骤1.首先在BLL业务逻辑层, 建好对应的 一个 返回List<T>的没有逻辑主体的方法

public List<Student>GetStudentList(){ return new List<Student>();};

public List<Teacher>GetStudentList(){ return new List<Teacher>();};

步骤2. 在解决方案目录下, 选择rdlc,右键=>打开方式=>xml(文本)编辑器打开

可以看到有  <DataSources>节点 和  <DataSets> 节点,这两个是 一一对应的.

假设我现在有 2个数据源  <DataSource Name="DataSource1"> <DataSource Name="DataSource2"> 和   <DataSet Name="DataSet1">, <DataSet Name="DataSet2">

DataSource   结构说明:   设置一个Name和 DataSourceID (必须唯一)

    <DataSource Name="DataSource1">
<ConnectionProperties>
<DataProvider>System.Data.DataSet</DataProvider>
<ConnectString>/* Local Connection */</ConnectString>
</ConnectionProperties>
<rd:DataSourceID>f967ab1f-060c-4fd6-b670-a2ffbf328f9c</rd:DataSourceID>
</DataSource>

DataSet 结构说明:  <Query> 里面设置的 <DataSourceName>就是 数据源 ,对应上面的 <DataSource>, 然后下面是 <Fields> 字段列表.

<Fields>节点里面是数据源的字段列表, 字段名, 数据类型. 最后面有一个  <rd:DataSetInfo>,着重说一下这个

<rd:DataSetName>是 上面所定义的方法的类所在的命名空间.

<rd:TableName>RdlcDataSource</rd:TableName>是类的名称,  我这里专门建一个类, 用于存放rdlc的数据源

<rd:ObjectDataSourceSelectMethod> 是方法的名称  , 例如返回List<T> 的方法名

<rd:ObjectDataSourceSelectMethodSignature> 这个是 对返回List<T>的方法, T 的解释 ,如下表示 是一个List, T的类型是   PdfLibrary.Models.Cfxx (命名空间.类名), 方法名是 GetCfxxList

==> System.Collections.Generic.List`1[PdfLibrary.Models.Cfxx] GetCfxxList(System.Collections.Generic.List`1[PdfLibrary.Models.Cfxx])

<rd:ObjectDataSourceType> 对"类" 对象的说明;  该类是 PdfLibrary.dll下, 类的全名称是   PdfLibrary.CreatePdfTemp.RdlcDataSource

==> PdfLibrary.CreatePdfTemp.RdlcDataSource, PdfLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

<DataSet Name="DataSet1">
<Query>
<DataSourceName>DataSource1</DataSourceName>
<CommandText>/* Local Query */</CommandText>
</Query>
<Fields>
<Field Name="cfbm">
<DataField>cfbm</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Fields>
<rd:DataSetInfo>
<rd:DataSetName>PdfLibrary.CreatePdfTemp</rd:DataSetName>
<rd:TableName>RdlcDataSource</rd:TableName>
<rd:ObjectDataSourceSelectMethod>GetCfxxList</rd:ObjectDataSourceSelectMethod>
<rd:ObjectDataSourceSelectMethodSignature>System.Collections.Generic.List`1[PdfLibrary.Models.Cfxx] GetCfxxList(System.Collections.Generic.List`1[PdfLibrary.Models.Cfxx])</rd:ObjectDataSourceSelectMethodSignature>
<rd:ObjectDataSourceType>PdfLibrary.CreatePdfTemp.RdlcDataSource, PdfLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</rd:ObjectDataSourceType>
</rd:DataSetInfo>

绑定列表:

<DataSources> 的第一个节点, 最好设置成,用来绑定 表格的. ,  后面可以直接使用    <Value>=Fields!cfbm.Value</Value> 来绑定字段,

这里的 Fields 默认指的就是  第一个数据源DataSet1 里面的字段.

绑定文本字段:

如果单独绑定某一个文本框 <Value>=First(Fields!cfbm.Value, "DataSet1")</Value> ,

如果要用到 第二个数据源, 绑定某一个文本框,  要这样使用, 指定   <Value>=First(Fields!cfxx_sjfw.Value, "DataSet2")</Value>

备注说明:

一个 表 对象, 里面只能设置一个数据源, 如果有不同的数据源, 需要拆分出来, 单独创建一个表,单独选择 DataSetName

小技巧:

当有多个数据源的时候, 新建一个空白的 rdlc,然后 放一张 表, 会选择数据源, 然后将这个里面的 dataset 里面的配置, 拷贝过去,更改 datasource 就行了.

[RDLC]心得整理(一)的更多相关文章

  1. (转)Mysql数据库主从心得整理

    Mysql数据库主从心得整理 原文:http://blog.sae.sina.com.cn/archives/4666 管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本 ...

  2. 心得整理之一--RDLC多数据源多表

    我将项目中的一部分提炼出来,写了这个Demo. 先说一下需求, 从 API接口, 获取数据源, 调用RDLC 生成PDF文件. (后面还有涉及到使用福昕PDf阅读器进行设置文件自定义内容,以供外部程序 ...

  3. Mysql数据库主从心得整理

    管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行,希望对 ...

  4. maven学习心得整理

    maven的学习心得 已经接触了maven项目有一段时间了,开始时仅仅会使用,在使用中发现了它的强大和方便,于是决心研究一下: 首先,普及一下maven参数: -D:传入属性参数 -P:使用POM中指 ...

  5. WEB网站测试心得整理

    一.输入框: 1.正常的字母/文字/数字(正常流程的测试): 2.重复提交(输入内容后,重复点击提交按钮): 3.纯异常字符/正常输入夹杂异常字符(!@#¥%……&**等等): 4.长度限制( ...

  6. 自学java一路以来,心血心得整理分享

    ✿ 贴心提示:文章内容比较长,但都是干货,请大家耐心看完.时间不够充裕的小伙伴,建议收藏,一定要耐心看完,保证对你有后续学习java有所帮助. 一.推荐背景介绍 (一)我是怎么学的? ★ 非常普通的人 ...

  7. android最近心得整理

    activity中OnAttachedWindow生命周期在OnResume之后,所以对长宽获取在推荐在OnAttachedWindow中进行. onDetachedWindow是在OnDestroy ...

  8. IDEA使用心得整理

    [演出模式] 我们可以使用[Presentation Mode],将IDEA弄到最大,可以让你只关注一个类里面的代码,进行毫无干扰的coding. 可以使用Alt+V快捷键,弹出View视图,然后选择 ...

  9. 定时器setTimeout()和setInterval()使用心得整理

    JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成. 一.setTimeout() setTimeout函 ...

随机推荐

  1. Qt 学习之路 2(14):对话框数据传递

    Home / Qt 学习之路 2 / Qt 学习之路 2(14):对话框数据传递 Qt 学习之路 2(14):对话框数据传递  豆子  2012年9月15日  Qt 学习之路 2  53条评论 对话框 ...

  2. nginx 搭建 rtmp 服务器

    前言 最近接手了一个跟视频监控相关的项目,用了近年来越来越流行的 Web 服务器 nginx 加上 nginx-rtmp-module 搭建 rtmp 服务器.使用了阿里云的服务器,系统 Ubuntu ...

  3. 利用JPanel和JLabel设置背景图片

    //创建面板1,放置背景图片1 JPanel jPanelTop=new JPanel(); jPanelTop.setBounds(,-,,); //x=0,y=-5用来设置面板距离窗体左上角的距离 ...

  4. P3172 [CQOI2015]选数(莫比乌斯反演)

    [题目链接] https://www.luogu.org/problemnew/show/P3172 [题解] https://www.luogu.org/blog/user29936/solutio ...

  5. linux查找重复文件

    >/dev/ >/dev/null|grep 02a42c7a845094a8904f7b3faf686b81 uniq -d, --repeated only print duplica ...

  6. Why do you need a new Launch X431 scan tool?

    1- 2017 Launch x431 v supports “Special Functions” The 2017 version of Launch x431 v diagnostic tool ...

  7. @RequestParam详解以及加与不加的区别

    以前写controller层的时候都是默认带上 @RequestParam 的, 今天发现不加@RequestParam 也能接收到参数 下面我们来区分一下加与不加的区别 这里有两种写法 @Reque ...

  8. junit使用中的一些问题

    之前开发过程中的测试,不是使用main方法,就是启动项目调用地址,尤其是后者,测试起来非常不方便,今天配置了下junit,中间遇到些问题,记录如下. 首先下载spring-test.jar包和juni ...

  9. Android NDK开发 JNI操作java构造方法,普通方法,静态方法(七)

    Android NDK开发 JNI操作java普通.静态.构造方法 1.Jni实例化一个Java类的实例jobject 1.通过FindClas( ),获取Java类的的jclass 2.通过GetM ...

  10. Trees on the level UVA - 122 (二叉树的层次遍历)

    题目链接:https://vjudge.net/problem/UVA-122 题目大意:输入一颗二叉树,你的任务是按从上到下,从左到右的顺序输出各个结点的值.每个结点都按照从根节点到它的移动序列给出 ...