本demo為 提供。
我們以push模式為例,既是push,就必須先構造出水晶報表「骨架」---資料集,在專案新增一資料集,我這裡在資料集裡面新增兩個datatable,乙個maintable(主報表用),乙個subtable(子報表用),在maintable新增兩列:id和desc,其中id設為自增列,如圖示
在subtable新增三列:id、mainid和desc,其中id也設為自增列,mainid用來與maintable的id關聯
資料骨架構造完畢,我們再為專案新增倆rpt檔案,顯然是乙個主表,乙個子表,接著我們為報表設定資料來源,開啟主表rpt模板,在字段資源管理器右擊資料庫字段,開啟資料庫專家,為主報表設定資料表,這裡僅將maintable設定為主表資料來源,如圖示
子表類似,將subtable設為子表資料來源即可。
好,報表骨架已經有了,再來設計模板,我們先設計子報表模板,將subtable中的mainid/id/desc三字段拖放到子表詳細資料節,一般情況下,子報表的頁尾節用處不大,顯示出來反而佔空間,所以我們將其抑制顯示,子報表最終設計模板如下圖所示,很簡單吧:)
子報表設計完後,再來設計主報表,也很簡單
首先我們將maintable中的id/desc拖放到詳細資料節,然後在模板新增乙個詳細資料節(右擊詳細資料節選擇在下方插入節即可)用來放置子報表物件,在報表空白處點右鍵->插入->子報表,位置就放在我們剛剛新新增的詳細資料b節,此時彈出的插入子報表窗體會自動在專案中選擇rpt物件,而且目前我們專案只有主/子報表兩個rpt,所以會預設將子報表rpt設為其子報表。回到主報表模板,右擊子報表物件->更改子報表鏈結,將主表id與子表mainid進行關聯,如圖示
至此主報表設計完畢,最終設計模板如下圖所示
我順帶修改了下id與desc欄位物件的字型樣式,當然設計模板可根據你的實際需要設計,我這邊僅僅只是乙個demo
好了,模板設計完畢,進入**
[csharp]view plain
copy
print?
using
system;
using
system.collections.generic;
using
system.componentmodel;
using
system.data;
using
system.drawing;
using
system.linq;
using
system.text;
using
system.windows.forms;
using
crystaldecisions.crystalreports.engine;
namespace
reportdemo
///
/// 往「骨架」塞資料
///
///
///
private
void
frmmain_load(
object
sender, eventargs e)
///
/// 「report」按鈕事件
///
///
///
private
void
btnreport_click(
object
sender, eventargs e)
///
/// 窗體關閉前刪除水晶報表產生的臨時檔案,避免過多臨時檔案導致「報表載入失敗」
///
protected
override
void
onformclosing(formclosingeventargs e)
} }
最終執行效果
為水晶報表(含子報表)繫結資料
本demo為 提供。我們以push模式為例,既是push,就必須先構造出水晶報表 骨架 資料集,在專案新增一資料集,我這裡在資料集裡面新增兩個datatable,乙個maintable 主報表用 乙個subtable 子報表用 在maintable新增兩列 id和desc,其中id設為自增列,如圖示...
2019 1 17為水晶報表(含子報表)繫結資料
我們以push模式為例,既是push,就必須先構造出水晶報表 骨架 資料集,在專案新增一資料集,我這裡在資料集裡面新增兩個datatable,乙個maintable 主報表用 乙個subtable 子報表用 在maintable新增兩列 id和desc,其中id設為自增列,如圖示 在subtable...
水晶報表 子報表
經過了一段時間對水晶報表的操作,我對其稍稍了解了一點點。這兩天,一直在為資料量太大而煩惱,我有六張表,其中一張關聯剩餘的五張表。想要顯示資料,結果,顯示不出來,即使我已經在鏈結裡面設定了左外連線。我知道這個是按照笛卡爾積相乘,所以資料會成倍的增加。所以,即使我改用直接連線資料庫的方式也行不通。就是p...