1. 程式人生 > >[RDLC]心得整理(一)

[RDLC]心得整理(一)

例如 gen 選擇 基本 ide 多個 視圖 需要 query

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]心得整理(一)