zoukankan      html  css  js  c++  java
  • [RDLC]心得整理(一)

         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 就行了. 

      

  • 相关阅读:
    并发编程——IO模型(重点)
    03-使用 HashMap 还是 TreeMap?
    02-Spring框架中Bean的生命周期
    01-Spring,SpringMVC,SpringBoot,SpringCloud的区别和联系
    MongoDB教程17-MongoDB聚合
    MongoDB教程16-MongoDB索引
    MongoDB教程15-MongoDB $type 操作符
    MongoDB教程14-MongoDB查询文档
    MongoDB教程13-MongoDB删除文档
    MongoDB教程12-MongoDB更新文档
  • 原文地址:https://www.cnblogs.com/mjxxsc/p/9115342.html
Copyright © 2011-2022 走看看