天天看點

擺擺控件,就可以實作多功能(送出、修改、浏覽)的表單了[原]

最近封了一個簡單的類庫,主要目的是幫助實作簡化制作表單頁面的工作。使得制作一個具有送出、修改、浏覽功能的表單頁面,隻需要擺好控件再寫很少量的代碼即可。在需求發生變動需要調整UI的時候,也僅是調整控件的擺放而已。而且還可以根據工作的流程制作多套表單,在實際使用的時候,根據流程不同來動态切換。這裡發個簡單的Demo,實際要比這複雜一些,但是Demo已足夠闡述實作原理,目的也就達到了。

下面做簡單的介紹,具體看代碼。(代碼是ASP.Net2.0/VS2005的,在C/S裡的實作,原理也是一樣的。)

約定:

1.表單上的控件ID名稱需要同對應的實體的資料字段名相同。(以此為依據映射資料)

一、使用步驟:

1、引用Justin.UILibrary.dll;

2、添加一個使用者自定義控件DemoUI.ascx;

3、擺放表單控件,簡單示範如下圖:

紅色部分為自定義校驗控件,這裡隻是個示範,實際中怎麼弄随便了。

4、修改使用者控件的代碼如下:

5、到此,一個隻管收集資料,顯示資料,修改資料的UI使用者自定義界面就做好了。下面需要在頁面上使用這個使用者自定義控件。Go on …

6、在頁面需要顯示這個表單的地方放一個PlaceHolder控件,這麼做是為了可以動态加載使用者自定義控件,從另一個角度來說,這也實作了動态替換不同的使用者自定義控件功能,比如你有多個表單需要在不同的情況下動态切換,那麼,使用PlaceHolder控件,再配合XML配置檔案,一切就OK了。

7、然後在頁面的*.aspx.cs裡添加如下代碼:

8、Ctrl+F5執行程式,一切就OK了!

二、效果示範:

a、送出的時候(除了下拉框,其它都為空):

b、浏覽的時候(所有控件不可用)

c、修改狀态(界面上有資料,為待編輯狀态)

三、Deom總結

最後畫了一個簡單的順序圖,說明一下程式内部是如何執行的。其中,關于XML的部分在Demo裡沒有做,隻是用注釋标明了一下,這個很簡單,但是功能卻很強大,可以讓你在運作時動态決定界面加載哪個預定義的表單使用者自定義控件,是以有必要在圖中畫了一下。

四、關于Justin.UILibrary.dll

最後我們再簡單說一下Justin.UILibrary.dll,有了它,使得制作表單的大部分工作變成了擺控件,它把報單裡可以抽出來的東西盡量都封裝了起來,使得大部分代碼工作都得到了重用。這裡簡單說一下最核心的UI.cs類,它是表單控件的基類,如上面的步驟4所示,繼承它之後,隻需要附加很少的代碼,即可以完成表單的背景代碼工作。當然,這裡提供的都是最基本的功能,如果使用者自己有任何其他字定義功能,都可以自己在繼承的基礎上再進行擴充。

其中比較關鍵的幾個地方是:

1.ExecActionEvent()方法

這個方法使用委托的機制,将最終按鈕的功能如何實作抛出來由使用者自己去實作,WHY?因為鬼才知道使用者會做什麼,這是封裝控制不了的因數,是以要抛出去。

2.InitControl(UIType type)方法

這裡相當于模闆方法模式的應用,内部在不同狀态下調用的三個virtual方法,給了SubCalss一個插入功能的機會,即,可以分别在送出、浏覽、修改的狀态下初始化界面時,加入自定義的功能。如步驟4中所做的,在送出的時候,将按鈕的标題改為“送出”,在修改的時候,将按鈕的标題改成“儲存”,當然,使用者自己還可以做很多别的什麼事情,這個靈活性是封裝的基類不去關心的,基類隻提供“工作機會”,至于工作的怎麼樣,自己看着辦吧。

如下圖所示:

五、代碼下載下傳

雖然這裡還隻是示範代碼,部分地方還有待完善,但是這篇文章主要想說的是如何通過封裝來重用和簡化代碼工作,重要的是其中的原理和思想,還希望各位朋友看過代碼後多提寶貴意見。

本文轉自Justin部落格園部落格,原文連結:http://www.cnblogs.com/justinw/archive/2006/10/04/520924.html,如需轉載請自行聯系原作者