馮亞麗,王 錚,呂春龍,曹志民,戴 慶
(1.東北石油大學計算機與信息科學學院,黑龍江大慶,163318;2.長慶油田分公司,第一采油技術服務處,西安710200;3.東北石油大學電子科學學院,黑龍江 大慶163318)
近年來,隨著網(wǎng)絡的發(fā)展,靜態(tài)報表已經(jīng)不能滿足用戶的需求.中國式報表以其格式整齊美觀、又符合中國人的思維方式等特點,深受中國人的喜愛.為此,對其在信息處理中的應用研究與創(chuàng)新不斷深入.而動態(tài)中國式報表是其應用研究的新的難點之一,動態(tài)中國式報表不僅實現(xiàn)了報表的動態(tài)生成,而且可以展現(xiàn)復雜的報表樣式[1].這樣動態(tài)的生成中國式報表,使表結(jié)構(gòu)的定義存儲與數(shù)據(jù)信息分離,如果表結(jié)構(gòu)發(fā)生變化,只需修改表結(jié)構(gòu)的定義,無需站點維護人員重新編寫程序和設計報表,大大提高了維護人員的修改報表的工作效率,增加了報表的兼容性和適應性.本文深入地研究了中國式報表的動態(tài)生成的方法,并對生成過程中存在的難點和問題進行了詳細分析.
1)報表數(shù)據(jù)
報表中的數(shù)據(jù)是指用戶將原始的數(shù)據(jù)信息整理加工,使其按一定格式存儲,方便查詢、管理.如需要對其進行讀取、求和及復雜運算等,最后通過報表顯示或打印出用戶所需的數(shù)據(jù).
2)報表的結(jié)構(gòu)及使用
由于報表的結(jié)構(gòu)復雜多變,尤其是中國式報表更是布局靈活.依據(jù)對目前常用報表的分析,可將報表的結(jié)構(gòu)歸結(jié)為六類模板:單表、多表、交叉表、向下鉆取表、復雜表、中國式報表.并分別將它們存入數(shù)據(jù)庫中,用戶根據(jù)需求選擇不同的模板,實現(xiàn)報表的輸出.
3)報表的打印
報表的打印與打印設備無關,支持多種打印格式.
系統(tǒng)總體架構(gòu)設計是在系統(tǒng)分析的基礎上通過對多種可實現(xiàn)方案的建模、仿真、計算、綜合和優(yōu)化,最終形成總體研制方案的過程,是軟件開發(fā)的重要環(huán)節(jié)[2].
根據(jù)對中國式報表的系統(tǒng)分析,本文設計報表的功能模塊如圖1所示.
圖1 報表功能模塊圖
在整個系統(tǒng)架構(gòu)下,各模塊的功能如下.
動態(tài)報表生成:從需求分析中知道,報表的樣式分為六種包括:單表、多表、交叉表、向下鉆取表、復雜表、中國式報表.設計可視化界面,通過選擇報表模版,選擇報表中要包含的數(shù)據(jù)信息,輸入要顯示的報表的相關信息.例如報表標題、制作人、修改時間等信息.采用動態(tài)SQL語句技術組織查詢條件,利用ADO.NET技術將數(shù)據(jù)集中的數(shù)據(jù)綁定到報表查看器控件,實現(xiàn)對報表數(shù)據(jù)的查詢顯示.
報表導出及打印:Crystal Report在B/S模式下提供了很好的報表輸出功能,可將報表導出為Word、Excel、PDF、Htm l等格式.
報表管理:設計可視化界面,采用動態(tài)SQL語句技術組織查詢條件,采用ADO.NET技術將數(shù)據(jù)集中的數(shù)據(jù)綁定到GridView控件,實現(xiàn)對數(shù)據(jù)的編輯、選擇、刪除等功能.
1)B/S結(jié)構(gòu)
Browse/Server即(瀏覽器/服務器)模式是隨著Internet技術的興起,對C/S結(jié)構(gòu)改進的三層分布式體系結(jié)構(gòu),系統(tǒng)結(jié)構(gòu)如圖2所示.
圖2 瀏覽器/服務器模式
B/S結(jié)構(gòu)適用于使用范圍廣、地點靈活、而安全性、交互性要求不高的場合.其優(yōu)點是:①無需開發(fā)與安裝客戶端專用的用戶操作界面應用程序,只需安裝通用Web瀏覽器即可;②操作簡便,用戶無需特殊培訓就可以直接使用;③系統(tǒng)的開發(fā)者無需再為不同級別的用戶設計不同的客戶應用程序,只需在服務器上實現(xiàn)所有的功能,并就不同的功能為各個級別的用戶設置權(quán)限,各用戶通過HTTP請求在權(quán)限范圍內(nèi)調(diào)用Web服務器上的不同處理程序,就可以完成對數(shù)據(jù)的查詢或修改[3].
2)ADO.NET組件
ADO.NET構(gòu)建了數(shù)據(jù)意義上的.NET應用程序的基礎.ADO.NET將所有用于數(shù)據(jù)處理的類集合在一起,這些類代表數(shù)據(jù)容器的對象,它們分別針對典型的數(shù)據(jù)庫性能——索引和視圖.
3)數(shù)據(jù)查詢語言
SQL語言是關系數(shù)據(jù)庫管理系統(tǒng)的實現(xiàn)語言,是一種介于關系代數(shù)和關系演算之間的結(jié)構(gòu)化語言[4].
在數(shù)據(jù)庫中,對數(shù)據(jù)庫的各種操作一般都是通過SQL語句進行的,查詢是由select語句完成的,其最基本和常用的形式為select<列名>from<表名>where<查詢條件>,其中where子句可以由多個謂詞通過邏輯關系組合在一起,任何復雜的查詢都能由它表達出來,select語句是實現(xiàn)動態(tài)查詢的依據(jù).
相對于平時在程序開發(fā)中將用來定義、查詢和操作的語句的固定方式,動態(tài)SQL技術是SQL語句在設計時并不產(chǎn)生,而是在程序運行時,根據(jù)用戶的動態(tài)選擇臨時生成SQL條件,動態(tài)的生成SQL查詢串,然后去執(zhí)行并返回結(jié)果集,所以需要設計一個用戶可以選擇的友好的操作界面,靈活的拼接SQL條件,動態(tài)語句是報表中數(shù)據(jù)得以動態(tài)實現(xiàn)的基礎.
在作報表的數(shù)據(jù)處理時,動態(tài)SQL語句是常用的方法,因為動態(tài)SQL語句中的條件語句在程序運行時才被賦予確定的值,這樣增強了用戶對數(shù)據(jù)的可操作性,增加了程序的清晰度,提高了統(tǒng)計查詢的效率.
表的樣式一共分為六大模板,中國式報表是系統(tǒng)中最復雜的表模板.動態(tài)的中國式報表是指可以任意選擇一級列以及該列所包含的任意的二級列,對于行來說也可以任意選擇的復雜表表.表的結(jié)構(gòu)包含表標題、一級列標題、二級列標題、一級行標題、二級行標題.
① 新建一個DateSet命名為Shiyou,在數(shù)據(jù)庫中再新建一個DataTable命名為“syou”,表內(nèi)一共有10個列,s0~s2類型為string,s3~s9類型為int,如圖3所示.
②創(chuàng)建一個.rpt文件,右擊選擇“數(shù)據(jù)庫”→“數(shù)據(jù)庫專家”.在“數(shù)據(jù)庫專家”窗口中,展開“項目數(shù)據(jù)”,展開“ADO.NET數(shù)據(jù)集”→“Shiyou”選擇“Shiyou”下的表,將表添加到“選定的表”中.
圖3 數(shù)據(jù)集
③在報表設計器中,新建一個參數(shù)名為“?line0~?line3”用來存儲一級列名,“?s0~?s9”用來存儲二級列名.詳細資料下的“s0~s9”為數(shù)據(jù)集中DataTabel中的列,用來存儲表數(shù)據(jù)信息.最后再設計設置文本字體顏色、大小、樣式,如圖4所示.
圖4 設計報表模版
報表管理模塊的功能是采用動態(tài)SQL語句技術組織查詢條件,采用ADO.NET技術將數(shù)據(jù)集中的數(shù)據(jù)綁定到GridView控件,實現(xiàn)對數(shù)據(jù)的編輯,選擇,刪除等功能.
該功能模塊通過選擇基本表名,動態(tài)顯示基本表的所有信息.對表數(shù)據(jù)進行編輯、更新、刪除等,同時可將外部的Excel表導入到頁面.下面對各控件做簡要描述:
1)DropDownList1控件:選擇要顯示的基本表的名稱.
2)GridView1控件:顯示基本表的所有信息.
3)編輯:單擊該項后,表中的數(shù)據(jù)處于可編輯狀態(tài),編輯后選擇更新,將修改后表信息更新到數(shù)據(jù)庫中.
4)刪除:單擊該項后,對應該行的信息從表中刪除,同時更新到數(shù)據(jù)庫中.
5)TextBox1控件:此處輸入要導入的Excel表名.
6)Button1(導出為Excel)控件:將顯示的表導出為Excel.同時提示用戶保存.
7)Button2(導入Excel)控件:將要TextBox1中對應的表導入到GridView1中,并在頁面上顯示.
8)兩個CheckBox控件:動態(tài)控制列的顯示與隱藏.
圖5 導出界面
報表查看器自帶導出和打印功能.導出功能可以方便用戶將報表導出為Word、Excel、PDF、Html等不同格式的文件,并將文件保存到磁盤中.打印功能可以方便用戶打印設置.
系統(tǒng)實現(xiàn)了動態(tài)的生成復雜中國式報表,可以根據(jù)用戶需求生成所需的報表.實現(xiàn)了表結(jié)構(gòu)與數(shù)據(jù)的獨立存儲,增強了系統(tǒng)的適應性.以及用戶根據(jù)需求對報表進行一些簡單刪除、編輯、選擇操作.
[1]張能力.Web動態(tài)報表的實現(xiàn)[J].計算機應用與軟件,2004,21(4):15-17.
[2]劉鵬程.基于XML的web報表的設計與實現(xiàn)[J].科技信息,2010(3):86-87.
[3]李林廣.Web發(fā)布用戶自定義報表系統(tǒng)[J].南京工程學院學報,2002,2(2):24-27.
[4]祝 亮,陳建勛,陳 勇.一種報表模型的研究與實現(xiàn)[J].武漢科技大學學報:自然科學版,2007,30(3):302-304.