平面報表設計體驗
下圖就是一個條帶式報表的設計界面,很多報表工具比如Access,FastReport等等都是如此。實際上,若報表設計時采用控件拖拽的方式則一般是采用條帶式設計體驗。

這種條帶式報表設計體驗是傳統模式,歷史悠久,而且報表模板一般只有兩層結構,條帶和報表元素。結構比較呆板,任何報表元素都必須在某個條帶中,對于復雜的明細式報表,需要使用二三四級明細條,結構復雜,數據源綁定麻煩,當報表比較復雜時可能需要子報表,此時報表設計需要來回切換多個界面,使用不便。有些不大適應日益復雜的軟件開發環境,因此必須有所改善或突破,于是出現了類似EXCEL的電子表格的報表設計體驗,本文不討論EXCEL的報表設計體驗。
針對條帶式的一些缺點,本人提出了平面式的報表設計體驗,設計報表時仍然采用控件拖拽的方式來編輯報表元素,但拋棄的條帶式的結構,進而實現了多層次的報表結構。任意的報表元素都可以放置在設計面板上,不再區分頁眉頁腳主欄明細欄了,此外還實現了容器類型的報表元素,這種報表元素可以承載其他報表元素,比如面板和表格。由普通報表元素和容器報表元素混合其他使用就實現了多層次的樹狀報表結構。下圖就是實現了這種平面式的報表設計模式。
在這種設計方式下,設計器拋棄了條帶的模式,甚至頁眉頁腳的概念也放棄了,所有的報表元素緊密的組織在一起,而且在容器元素(面板和表格)的作用下形成一個樹狀的報表結構。設計器對于任何報表元素都是同等對待的,沒有了條帶的隔閡,也就形成了一種平面式的設計體驗。
有人要奇怪了,居然連頁眉頁腳的概念都拋棄了,那怎么實現頁眉頁腳的功能啊?其實在我這個工具中很簡單,只要指定報表的頁眉頁腳高度就可以了,報表引擎會根據頁眉高度,讓報表文檔的開頭的一部分作為頁眉來顯示。而將報表文檔的最后的指定高度的一部分作為頁腳來顯示。由于只是指定高度,對報表編制沒有任何影響,因此有很大的自由度,甚至可以讓一個報表元素一半顯示在頁眉或頁腳中而另一半顯示在表身中。這樣報表結構可以根據需要進行簡化,而頁眉頁腳中可顯示的內容就不受限制了。
平面報表設計體驗帶來了樹狀的報表元素結構,而為此相配套,筆者又推出了多層次的樹狀的數據源模型,這兩個樹狀結構緊密配合,就能將報表數據填充倒報表模板中而形成最終的報表輸出。
使用這種平面的設計體驗和樹狀的報表結構的好處主要有
- 符合報表的編制邏輯,對于條帶式報表,需要將一個報表強行拆分成一條條,但樹狀的報表結構不需要對報表進行拆分,而是把報表作為一個有機的整體進行設計,只要理解了原始報表的結構就不必考慮拆分就能設計報表了。
- 對于復雜報表,可很大的避免使用子報表,子報表會將報表設計分成多個界面,用戶需要來回切換,使用不便。而樹狀的報表結構理論上層數不受限制,可以承載復雜的報表,因此可以很大程度上的避免使用子報表,在同一個界面中設計報表簡潔方便。當然有時考慮到報表模板的重用,本工具也提供了子報表的功能。
- 樹狀報表結構比條帶結構更貼近人們常規的編程思路,便于人們編制和檢查報表結構。比如對于訂單明細報表,如果使用編程生成HTML文件來展示報表,則一般會采用Table的方式來實現而不會采用DIV的方式來實現。因為這個報表的主體就是一個表格。
- 由于此處表格就是一個容器,其單元格本身有文本內容,但還可以放置任意個數的其他報表元素,甚至是表格套表格,因此也就大大擴展了表格式報表的設計自由度。
在做報表設計器前,筆者已經開發了名為XDesignerLib的圖形化設計器中間件,這個中間件支持了多層次的設計文檔結構,使用了平面式設計體驗。在做報表設計器時,筆者就為了能利用XDesignerLib就苦思冥想,結合以前的報表開發經驗,想出了這套全新的報表理論,因此可以說這套理論是逼出來的。
根據上述,平面式報表設計體驗已經放棄了條帶式設計模式,是一種新的設計體驗,但該模型還比較新,應該還有有不少考慮不周之處,望大家多多評論。
XDesigner軟件工作室( http://www.xdesigner.cn ) 2006-9-20
posted on 2006-09-20 11:41 袁永福 電子病歷,醫療信息化 閱讀(2351) 評論(6) 收藏 舉報
浙公網安備 33010602011771號