2009年4月1日 星期三

介紹Dynamic Data Controls for ASP.NET 1-2

RunPC 165期:領先體驗微軟ASP.NET的「未來之路」(1)哇~原來可以不必寫程式


動態資料控制項(Dynamic Data Control;DDC)簡介

動態資料控制項(Dynamic Data Control;DDC)有人說它簡直就是ASP.NET版本的Ruby on Rails,不需要配置、也不須程式碼更無需任何事前動做,它只要一個控制項,一個完整的資料驅動程式就此搞定。筆者在看完官方網站提供的示範影片和眾多相關討論區的網友一樣,驚訝!心中憂喜參半,喜的是真的不用寫一行程式碼,就可以完成一個資料驅動程式耶!但,如果再這麼發展下去程式設計人員真的要好好思考自己的價值所在。
動態資料控制項集是ASP.NET伺服器控制項的一個新集合,它在執行階段自動獲取資料庫的結構資訊,根據使用者常見的顯示格式與預期,提供了預設的呈現格式,而且它也非常容易讓我們自定所要顯示的格式;當您安裝完Futures後,在Visual Studio的工具箱中會多出兩組伺服器控制項,其索引標籤名稱為ASP.NET Futures與ASP.NET Futures - Dynamic Data,如圖一所示,動態資料控制項集合包含DynamicAutoData、DynamicList、DynamicDetails、DynamicFilter、DynamicInsert、DynamicNavigator、DynamicRssLink等七個動態資料控制項,分別整理表列如表三;而另一組ASP.NET Futures控制項集合我們會在其它篇文章加以介紹。


圖一 ASP.NET Futures新增兩組控制項集合。



表三 各動態資料控制項介紹


只要DynamicAutoData控制項,不必寫程式

動態資料控制項的運作過程,它會自動搜尋專案中的資料庫,自動選擇與頁面檔案名相同的資料表或檢視表,自動提供列表顯示(DynamicList)、詳細內容顯示(DynamicDetails)、新增、刪除、修改、查詢、過濾(DynamicFilter)、分頁、排序以及RSS(DynamicRssLink)等功能,這些功能都是自動的,只要一個DynamicAutoData控制項,一個完整的資料驅動程式就此搞定。它是除了DynamicNavigator動態資料控制項外,功能最為全面的一個,幾乎將其它的動態資料控制項功能統統顯示到一個頁面上。
接下來讓我們實作一個,不必寫程式的Web應用程式吧!首先,請您依前您所建置的開發環境,開啟Microsoft Visual Studio 2005或Microsoft Visual Studio 2008 (Beta 2),在功能表上選擇[檔案]、[新增]、[網站],出現如表一右側圖,選擇[Dynamic Data Web Site]專案範本後確定,建立專案如圖二,它自動加入了些專案參考元件,且少了Default.aspx檔案(這是因為動態資料控制項是依資料表與面頁檔名配對,故不先預建Default.aspx檔案)。接著依您專案的需要加入一個mdf的MS SQL資料庫檔案或新建一個,在此我們拿MS SQL Server提供的NorthWind範本資料庫來作示範,將NorthWind.mdf複製到專案中的[App_Data]資料夾;接著開啟伺服器總管如圖三,即可獲得NorthWind資料庫的資料表資訊;接下來在專案上[加入新項目],如圖四,選擇範本Dynamic Data Web Form再設名稱同圖三資料表名稱,本例將頁面名設為Employees.aspx來顯示Employees資料表資料,加入後網頁原始檔內容為程式1。至此我們還未寫入一行程式碼,按F5執行此頁,結果畫面如表四,已含蓋其餘五個態資料控制項功能(除DynamicNavigator外),且連圖檔欄位亦不需額外加以處理,更有趣的是也支援外來鍵的直接鏈結,具完整資料驅動程式,在一個頁面上擁有所有的CRUD(Create、Read、Update、Delete)操作。


圖二 建立Dynamic Data Web Site專案後的方案總管。


圖三 NorthWind資料庫結構。



圖四 加入Dynamic Data Web Form同資料表Employees名稱。



程式1



表四 加入DynamicAutoData動態資料控制項Employees.aspx執行畫面片段

(註:DynamicAutoData執行畫面切割為三個片段說明,右側兩欄分別為對應之動態資料控制項與其具備操作功能。)
動態資料站台配置檔相關設定
選擇配對的資料庫:若讀者有試著打開圖二之Web.config,會發覺該專案幫我們自動加入很多配置設定;首先我們先了解動態資料控制項,如何選擇要與其配對的資料庫與其順序,系統會先查看配置檔內是否有明確指定資料庫連接字串,若無,才接著查看配置檔內是否恰好僅有一個資料庫連接字串,若多於一個則必須於明確指定,若無,則至專案[App_Data]資料夾查看是否有僅有一個資料庫檔案,同上若多於一個則依舊必須於明確指定要連結的字串;而上面的的例子,配置檔只用預設內容,又[App_Data]資料夾僅有一個NorthWind.mdf資料庫檔案,故會選此資料庫檔案當動態資料控制項的配對資料庫。
配置資料表或檢視表:上例中我們指定頁面要顯示Employees資料表,故指定頁面名稱為Employees.aspx,若希望能在兩個頁面呈現Employees資料表時,請在專案上建立Employees資料夾,在資料夾內用到的動態資料控制項皆會以Employees資料表為呈現資料;如圖四在資料夾內建立list.aspx與details.aspx兩檔案,兩檔案皆只用到DynamicAutoData動態資料控制項,但卻分別預設用以列表顯示與詳細內容顯示,可以在配置檔案內指定listView與detailsView以修改預設頁面名稱;當然亦可以修改資料表對應資料夾名稱,如程式碼2,修改成MyList.aspx與MyDetails.aspx為列表顯示與詳細內容顯示,而MyEmployees資料夾是對應至Employees資料表。


程式2


整合動態資料控制項與ASP.NET伺服器控制項
除了表三對各動態資料控制項的簡單介紹外,表五中我們整理出各動態資料控制項與現行 ASP.NET伺服器控制項的對應表,我們可以在動態資料頁(Dynamic Data Page)上,放置除DynamicAutoData外的動態資料控制項與其對應的ASP.NET伺服器控制項,然後各自對對應的ASP.NET伺服器控制項進行屬性的設定(如:背景色)或套用其自動格式化…等設定其外觀樣式,最後指定各動態資料控制項的ControlID為對應的ASP.NET控制項ID,即可使現行運行上的樣版輕鬆套用至各動態資料控制項上。
下圖五我們在專案上建立一Products資料夾,該資料夾下之動態資料頁皆是針對Products資料表進行操作,在該資料夾內加入ProductsList.aspx之動態資料頁,將頁內之DynamicAutoData控制項刪除,加入動態資料控制項:DynamicList與其對應之ASP.NET伺服器控制項:GridView,將DynamicList之ControlID設為GridView1(GridView之ID)後,設定GridView1的自動格式化為秋天,再設定其屬性AllowSorting與AllowPaging為True,執行後即如圖五所示;若將DynamicList屬性EnableDelete與EnableUpdate設為False則只能唯讀,刪除與編輯的功能則被拿掉,若再將GridView屬性AutoGenerateDeleteButton與AutoGenerateEditButton設為True則刪除與編輯功能會再被加入,故可知動態控制項屬性與其對應ASP.NET伺服器控制項屬性設定有衝突時,會以ASP.NET伺服器控制項設定為主。

表五 動態資料控制項與ASP.NET控制項對應表



圖五 動態資料控制項與其對應ASP.NET控制項的執行畫面。


動態資料控制項的自定顯示功能
若您開啟任一動態資料頁的程式碼頁面,它會告知您有GetColumns()、GetDetailsColumns()、GetRSSFields()、InitRow(row)、InitDataSource(dataSource)等五個方法可供覆寫,將之整理如表六,其中GetColumns方法可指定DynamicList要傳回的欄位、自定欄位組合、自定欄位組合含欄位名,後兩者VB.NET尚不支援,C#與IronPython、Managed Jscript動態語言可實作;GetDetailsColumns方法為可指定DynamicDetails要傳回的欄位; GetRSSFields方法只取前兩個欄位,分別代表RSS的Item標籤title與description,其RSS標籤link會以details.aspx加網址參數表示,該網頁會以DynamicDetails呈現該筆可維護資料;InitRow方法可依條件指定資料列要呈現的樣式;InitDataSource方法可設定其過濾條件運算式。

表六 動態資料控制項五覆寫方法


因為要示範各覆寫方法,所以我們拿DynamicAutoData動態資料控制項來示範,首先,在Products資料夾內新建一動態資料頁,該頁面即會預建一個DynamicAutoData動態資料控制項,而程式3是各方法覆寫方法與說明,除InitDataSource外其餘皆可正常顯示,如圖六所示。

程式3



圖六 DynamicAutoData動態資料控制項覆寫各方法後之畫面。


DynamicAutoData VS DynamicNavigator動態資料控制項
最後筆者將介紹比DynamicAutoData還神奇的DynamicNavigator動態資料控制項,如果您將DynamicAutoData視為是自動針對整個資料表維護程式進行產出,那您可以視DynamicNavigator為自動針對整個資料庫維護程式進行產出,以後我們可能只要將資料庫的資料表建立好、各關聯設定好、其它資料庫規則定義完成,整個資料庫的網頁維護程式,連一行程式碼都不用就可以完成,沒錯,它就是這麼神奇,這是如何辦到的呢?只要三步驟,首先,一如往常在專案中加入一動態資料頁,再將頁面上的DynamicAutoData換成DynamicNavigator動態資料控制項,確定IncludeTables與IncludeViews屬性為True;最後修改Web.Config配置檔內dynamicDataControls標籤屬性showAllTables設為true即可;當然您可以加入一選項步驟,整合Menu伺服器控制項將自動格式化配置為繽紛,再將DynamicNavigator的CotrolID指定為Menu,結果如圖七所示,全部真的不需半行程式碼。


圖七 DynamicNavigator動態資料控制項維護整個資料庫畫面。


結論
本期筆者為各位介紹ASP.NET Futures的五大新功能之一:動態資料控制項,雖然功能上仍有些許小遺憾,且目前資料庫的部分只支援MS SQL Server,但相信在不久的將來微軟應會對自家的Access與其它像是Oracal、MySQL…等資料庫提供支援;而讀者在看完本期介紹的動態資料控制項後也應可以領先體會『哇~原來可以不必寫程式』這標題的意思,當然在讚嘆之餘,身為程式設計師的我們也必須好好省思自己的定位!

參考資源
ASP.NET Futures快速教學網:http://quickstarts.asp.net/Futures/
ASP.NET Futures官方論壇網:http://forums.asp.net/1127.aspx
動態資料控制項示範教學影音檔:http://download.microsoft.com/download/5/9/8/5985f834-b3ea-459b-98ba-0aede5bc653a/DynamicDataControls.wmv

2 則留言:

匿名 提到...

依筆者的作法操作一次,還真順,原來真的一行程式也不必寫耶!不知還有進階哪些可以參考的資料呢?謝謝

MLChen 提到...

ASP.NET Futures是Preview版所以資源並不多,官方網站快速教學(http://quickstarts.asp.net/futures/)可以看一下,因為VS 2008上市了,建議你現在安裝VS 2008再裝ASP.NET 3.5 Extensions(http://www.asp.net/downloads/3.5-extensions/),官網有許多教學影片可以參考喔!歡迎你常來討論。

加入書籤: MyShare HemiDemi Baidu Google Bookmarks Yahoo! My Web PChome Del.icio.us Digg technorati furludn bookmark 其他更多書籤

BOOKS:New and Upcoming