GridView 欠擠 DataGrid, OK ga?
2 |
ASP.NET 2.0問市後,其中有個受人注目的明星---GridView,它以DataGrid接班人的態勢,企圖取而代之(由VS 2005中預設把DataGrid藏起來可見一斑)
其中,GridView最讓人稱道的改良就是以前DataGrid雖然提供了換頁、排序等功能,但仍要自己寫一小段Code。而GridView的換頁、排序等邏輯則全部內建了(其實要靠另一個新控件SqlDataSource幫忙),光靠設定就可以完全搞定。另外,GridView甚至可以清單項目上編輯後直接更新或刪除某一筆資料(咳,說穿了還是得靠新朋友SqlDataSource,不要幻想DataSource=YourDataTable後就能看到奇蹟)。
理論上,GridView包容了所有DataGrid既有的特性,又加上方便的新功能,既然用VS 2005開發,傻瓜才不換吧?
對一般人來說是無庸置疑的抉擇,對我這種喜歡投時間DIY寫工具的人來說卻未必。因為先前感受DataGrid換頁、排序還要寫Code的痛苦,就開發了一顆名叫ListAssistant的控件,把這些煩人的工作包起來,將清單顯示的資料提供簡化成給DataTable即可,換頁/排序由控件全包。另外,ListAssistant還配合公司環境要求的UI互動模式,提供了額外的支援。比較起來,ListAssistant+DataGrid的組合會比GridView更符合我工作上的需要,但GridView又有一些額外的功能值得期待,值不值得投入時間做出ListAssistant+GridView的組合呢??
引用董大偉先生被ASP.NET 2.0搶走飯碗的Programmer?文章裡的一段話:
… 另外則是採用ASP.NET 1.1作為專案開發的人員(類似筆者這種)。過去我們花了很多心思從ASP轉換到ASP.NET 1.1,沒想到在ASP.NET 1.1才辛苦開發完成的函式庫,到了ASP.NET 2.0後,某些變成基本功能,我要說,心裡除了很X之外,實在也有點佩服微軟,畢竟這是一種進步,過去ASP.NET 1.1上要花長時間才能完成的東西,現在微軟則幫你做好擺在眼前等你享用...
在心裡很X之餘,仔細評估了一下,針對我的應用需求做分析,升級GridView並改寫ListAssistant是值得的嗎? 關鍵在於要了解GridView多了哪些新功能,才能決定成本效益比。所以就把焦點放在GridView多了哪些功能吧! (From: MSDN Comparing the GridView and DataGrid Web Server Controls)
1.Richer design-time capabilities.
最大的演進主要強調換頁、排序功能的整合,由於我的控件(ListAssistant)已提供此類功能,故吸引力不大。而那些在設計階段就可以看到資料型別進行操作的概念,對於較大型的系統,資料源都是執行階段才由DAL決定/提供,很少有人會直接在Page上放SqlDataSource,設Connection String,其實用處不大。
2.Improved data source binding capabilities.
SqlDataSource控件成為DataTable、DataReader之外的新資料來源,它有點DataAdapter的味道,例如要指定SelectCommand、InsertCommand、DeleteCommand、UpdateCommand。GridView而能自動Paging、Sorting絕大部分是它的功勞,而其原理是跟我的ListAssistant很相似,也是將資料全部查回存回記憶體中,再進行Paging/Sorting;EnableCache屬性則可將資料Cache起來,不用每次換頁或排序時都重新查一次(強烈建議要啟用)。原則上,這些功能並沒有超出先前控件所能做的範圍,因此吸引力有限。另外,由於可設Insert、Update、Delete的Command,可以直接在GridView中Edit/Update/Delete這個特性很不錯!
PS: 不要誤會SqlDataSoruce只能連SQL,事實上它支援Support SQL、Oracle、OLE DB與ODBC等多種Provider,只是大家從1.0起就習慣了SqlCommand、OracleCommand、OleDbConnection這種命名慣例,一開始會懷疑它是否是MS偏袒SQL Server所派的紅衛兵。
3.Automatic handling of sorting, paging, updates, and deletes.
跟上一點提的差不多,ListAssistant在1.1時代就已有實作,所以也沒啥值得大書特書的。
4.Additional column types and design-time column operations.
多了BoundField, HyperLinkField, ButtonField, CommandField ImageField, and CheckBoxField幾種新的欄位型式,這點很迷人!
5.A Customized pager user interface (UI) with the PagerTemplate property.
Pager可以100%客製化,由於ListAssistant中己有統一的Pager展現,手上專案則要求所有頁面要一致,所以這條就派不上用場囉!
綜合考量以上的各項特性,ListAssistant+DataGrid的組合跟GridView+SqlDataSource相比,只輸在直接Edit/Delete及新欄位類別等次要的功能上,而預估新特性適用的時機也有限。最後評估,既然功能差異有限,在ASP.NET 2.0上,短中期內打算仍沿用DataGrid,暫無升級/改寫的迫切需求,至於改寫ListAssistant配合GridView一事,就留待機緣成熟囉。
Comments
# by keith
怎樣在WPF程式使用GRIDVIEW?
# by Jeffrey
to keith, 這裡介紹的是WebForm上的GridView元件,不適用WPF。你可以用WFP跟DataGrid關鍵字找尋技術文件參考。