原創|其它|編輯:郝浩|2012-11-06 15:57:19.000|閱讀 581 次
概述:實際應用中常常需要打印一個不確定欄數的分欄報表或欄數在執行階段會改變。例如在開發一個可能需要打印一個數據表數據的數據庫編輯器中就需要它。這種情況報表只能使用程序代碼創建,但FastReport提供了一種更簡單的方法來解決這個難題。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
實際應用中常常需要打印一個不確定欄數的分欄報表或欄數在執行階段會改變。例如在開發一個可能需要打印一個數據表數據的數據庫編輯器中就需要它。這種情況報表只能使用程序代碼創建,但提供了一種更簡單的方法來解決這個難題。
就是使用交叉表來達到這個目的。這種報表的與眾不同的特點就是在欄中打印數據。在此之前不需要知道分欄數。特別是這種類型的報表交叉部分是垂直放置,而不是水平的。這些區域的“Text”對象被放在水平(例如“主項數據”)和垂直(例如“交叉表”)區域的交叉點上。這種情況報表通過下面的原理創建:對水平區域數據源中的所有記錄全部被正確從垂直區域數據源的記錄中查阿找并指定。
因而,對于“主項數據”打印數據源數據表的內容時包含的是數據表自身,各個單獨記錄的字段列表是“交叉表”區域的數據源。
一個交叉表報表的簡單例子可以從PRNTBL1子目錄中找到。從這個例子中看到的報表在這個圖象中顯示。
這個圖象顯示“Text”對象放置在“主項數據”和“交叉表”區域的交叉點上,分別屬于“主項數據”和“交叉表”區域。如果報表使用CUSTOMER.DB中的記錄,就將它作為“主項數據”的數據源。報表中的欄目數由兩個TfrUserDataset虛擬數據源,將CUSTOMER.DB的字段數與“記錄”數連接。字段的值在TfrReport 對象的OnGetValue事件中設定:
procedure TForm1.frReport1GetValue(const ParName: String; var ParValue: Variant);
begin
if ParName = 'Cell' then
ParValue := Table1.Fields[frUserDataset1.RecNo].Value;
if ParName = 'Header' then
ParValue := Table1.Fields[frUserDataset2.RecNo].FieldName;
end;
當這個例子執行時,CUSTOMER.DB的所有記錄將被預覽。下面就是預覽看到的圖象:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件網