2011年7月17日 星期日

How to using Dynamic Data in GridView-2(如何在GridView上套用DynamicData動態資料機制)

在亞當斯的前一篇文章中:How to using Dynamic Data in GridView-1(如何在GridView上套用DynamicData動態資料機制)有寫到可以使用Dynamic Data 機制來快速呈現資料庫的資料,但是上述連結的那篇文章是用ASP.NET Dynamic Data Linq to WebSite專案來設計,所以預設不用特殊的設定就可以達到符合的功能,然後若是修改使用ASP.NET Dynamic Data Entities WebSite專案,又是如何?

1.建立一個ASP.NET Dynamic Data Entities WebSite專案:

clip_image002

2. 同之前的步驟,新增一個ADO.NET Entity Data Model,然後設定Pubs資料庫為資料來源,並修改Global.asax,這邊值得一提的是因為EDM的模式所產生的DataContext類別會加上命名空間,所以在設定骨幹網站的時候要給完整名稱,如:pubsModel.pubsEntities

DefaultModel.RegisterContext(typeof(pubsModel.pubsEntities), new ContextConfiguration() { ScaffoldAllTables = true });

routes.Add(new DynamicDataRoute("{table}/{action}.aspx"){
Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),Model = DefaultModel});

3. 新增一個網頁應用程式,加入GridView並設定資料來源為EntityDataSource,這邊我們挑選employee物件當作資料呈現來源

clip_image003

4. GridView控制項進入編輯欄位視窗,先找到動態欄位

clip_image004

5. 把動態欄位中的關聯欄位Jobs和Publishers加入GridView中

clip_image005

6. 瀏覽網頁,此時會出現錯誤訊息,如下圖所示:

clip_image006

主要是因為使用EntityDataSource設定資料來源的時候,它的一個很重要的屬性: ContextTypeName並不會自動給值,必須由開發者手動設定值。

7. 因此切換到EntityDataSource的屬性視窗,設定ContextTypeName為:pubsModel.pubsEntities

clip_image007

8. 以下是設定完成的EntityDataSource屬性資料

clip_image008

9. 最後重新瀏覽網頁,可以看到動態欄位Jobs和Publishers可以正確地顯示在GridView控制項上,並且擁有關聯網頁可以檢視。

clip_image009

How to using Dynamic Data in GridView-1(如何在GridView上套用DynamicData動態資料機制)

ASP.NET 4 有提供一個開發架構:ASP.NET Dynamic Data,可以快速地根據資料元件動態產生對應的網頁,但是如果想要將ASP.NET Dynamic Data套用到既有自行設計的GridView控制項的話來呈現資料的話,那麼就可以加入動態欄位來呈現。

以下就來示範如何在GridView控制項上套用DynamicData動態資料機制,以產生關聯資料列表:

1. 新增一個ASP.NET Dynamic Data Linq to WebSite專案

clip_image001

2. 加入一個LINQ To SQL Classes,並設定資料來源為Northwind.dbml,挑選幾個要測設的資料表,如:Product…等等,如下圖所示:

clip_image003

3. 修改Global.asax先啟用Dynamic Data骨幹網站,讓此網站可以快速動態產生資料網頁:

DefaultModel.RegisterContext(typeof(NorthwindDataContext),

new ContextConfiguration() { ScaffoldAllTables = true });

routes.Add(new DynamicDataRoute("{table}/{action}.aspx")

{

Constraints =

new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),

Model = DefaultModel

});

4. 瀏覽Default.aspx測試檢視是否可以成功啟用動態網頁

clip_image004

5. 接著要把動態網頁規則套用至自己設計的網頁中,先增一個DynamicGridView.aspx,加入一個GridView控制項,並設定Data Source為LINQ

clip_image005

按下OK,挑選Context Object為:NorthwindDataContext。

clip_image006

6. Table挑選Product(Table<Product>)為主要呈現的資料內容,欄位可以任意選,但是盡量挑選有參考其他資料表欄位關聯性質的,例如:Category…等等,這是為了凸顯動態資料的彈性。

clip_image007

7. 先瀏覽DynamicGridView.aspx,目前跟一般GridView設計時沒什麼兩樣,注意一下SupplierID 和 CategoryID兩個欄位,只有秀ID值。

clip_image008

8. 但是通常使用者想要看的資料並不會是ID值,而是希望看到名稱,甚至更聰明一點希望可以將關聯建立起來,可以直接檢視明細資料。

9. 刪除GridView的SupplierID 和 CategoryID欄位,並加入動態欄位下的Category和Supplier。

clip_image009

10. 再次瀏覽DynamicGridView.aspx就會發現新增的兩個欄位Category 和 Supplier資料都動態產生,甚至有聯結的欄位也自動將關聯加上。

clip_image011

11. 點選Category就可以檢視Categories/ListDetails.aspx的列表資訊。

clip_image012