比較JqGrid與XtraGrid
將JqGrid和XtraGrid拿來比較,覺得怪怪的,因為前者用於Web,後者是用於WinForm的。因此只能比較兩者的功能優劣,實現某種功能、效果的方便性和效率。首先分別粗略介紹XtraGrid和jqGrid
DevExpress是目前.net下最為強大和完整的UI控件庫, XtraGrid是這個控件庫中重要的控件之一。在XtraGrid中集成了大量的高級特征,所以使用它進行開發的人員只需要對其屬性進行簡單的設置或編 寫少量的代碼,就能創建出十分美觀的界面,從而使開發的工作效率大幅提高。
特點如下
- 完全支持ADO.NET,一閃而過的數據裝入速度,XtraGrid充分利用內建的ADO.NET功能。使用這些新的數據訪問架構並且內部數據模塊與數據表達分離,在任何數據裝入模式下XtraGrid不 使用任何額外的緩沖,即使當列分組時,XtraGrid使用很小的內存並執行請求操作與從數據源獲取數據一樣快速。
- 高級非綁定模式支持 , XtraGrid可以和所有支持List或ITypedList以及其繼承接口一起工作。
- 帶狀的/漂亮的列, 當屏幕顯得很很珍貴時,您能夠用帶狀列最大化可見列的數量呈現給客戶。您甚至非常容易和簡單地能夠在列頭顯示圖像。
- 自動數據分組並支持連接點分組 ,允許您的用戶分組儲存在XtraGrid中的數據,而且列無限制,使他們能夠從未有過的分析和編輯信息功能。
- 自動列分組,利用XtraGrid,您能夠排序無限制數量的列,不需要寫一行代碼;
- 自動數據過濾 , 通過類似Excel風格的過濾特征,您能夠基於列內容過濾數據 - 任何列。過濾表達式甚至可以顯示在網格的底部,提醒您的用戶他們正在查詢什麽內容。您還能夠創建您自定義的過濾對話框匹配用戶需要的過濾特征。
- 真正主細數據支持(Master-Detail) , XtraGrid允許您在綁定或非綁定模式下建立和表示主細(master-detail)信息,您甚至能夠使用下拉模式放縮每個細項級,允許簡單的維護最復雜的關系設置。
- CustomDraw自定義繪制, 需要繪制任何Grid對象 - 行、列頭等?用XtraGrid沒問題,只有您的想象是限制。
- 高級設計時支持 , XtraGrid提供高級的設計時編輯器,允許您控制所有XtraGrid的外觀而不需要寫任何一行代碼。使用高級設計時支持您能夠管理高級特征如級、風格、列和概括等。
- 完全的數據概括, 概括允許您直接在Grid中表示統計信息如MIN, MAX, AVG, SUM和COUNT而不必采用古老而難看的單獨的edit控件。您甚至允許您的用戶用分組頭和註腳概括分塊數據。
- 基於View的架構, 在XtraGrid中的每一級能夠通過不同的View表達。XtraGrid使用標準的行列View以及CardView,類似Microsoft Outlook。所有Views都能夠很快的改變。
- 每列多種編輯器 - XtraGrid的同一列可以使用不同的編輯器。
jqGrid是一個jQuery的plugin,提供grid操作界面,並支持經Ajax連結服務器上的資料源。jqGrid在共同的基礎結構上,提供數種操作模式,分別包裝於不同的檔案之中。除了共享的數個檔案之外,使用者按需要選擇操作模式,並使用對應的程序檔。可惜各操作模式之間常見功能雷同之處,程序重用性卻未進一步整合、提升,而各模式的更新速度也不太一致。
特點如下
- 完整的表格呈現與運算功能,包含換頁、欄位排序、grouping、新增、修改及刪除資料等功能。
- 客制化的工具列。
- 預設的Navigator 工具列,可以很容易的使用新增、刪除、編輯、檢視及搜尋等功能。
- 完整的分頁功能。
- 按下任一欄位的標頭,皆可以該欄位為排序項目。無論是升冪或降冪皆可。
- 預設的action formatter,可以快速而直覺地對每筆資料做運算。
- 除了jqGrid lib 所提供之formatter(包括email,link,select,checkbox,date 等) 外,開發者可以從資料來源自訂資料顯現方式,即所謂的custom formatter。
兩者的不同歸結為以下方面:
表格視圖
XtraGrid中有4種類型的View,它們分別是:GridView(二維表格視圖)、BandedGridView(帶狀二維表格視圖)、AdvBandedGridView(高級的帶狀二維表格視圖,增加了一些操作功能)、CardView(卡片視圖)。這4種類型的View都是從ColumnView中繼承而來,而ColumnView又是從BaseView繼承來的。其中BaseView和ColumnView都是抽象類(abstract),不能實例化。
由於每種視圖都是一個類,它們對基類ColumnView重寫不盡相同,故某些效果在一種視圖上可以實現,換了另一種視圖就不行了。
jqGrid同樣也有二維表格視圖,帶狀二維表格視圖,樹狀視圖。
對於二維表格視圖與帶狀表格視圖,它們的區別只在於在屬性處添加多一個表頭分組,對表格的操作完全一樣,故更換視圖的類型後其實現功能和效果不會有差異。
模板列
XtraGrid提供比較豐富的模板列類型,但是在自定義模板方面就欠缺了,一個模板列只能使用一種類型,比如在一個列裏頭想放一個不可編輯的文本框,一個圖片按鈕,還有一個日歷控件,這樣就辦不到了。而且那個模板列裏只能使用XtraGrid它定義的那套模板列類型,想使用自己定義的類型或者用微軟原本定義的控件也不行。用它原本的控件好處是get/set值比較方便,同時也使得模板沒辦法使用別的控件。
jqGrid它本身沒有提供模板列類型,就像.NET本身的GridView那樣,可以往模板裏添加多個控件,個人感覺jqGrid的模板列很自由很開放,可以在模板中可以放置一個或多個控件,可以是自己寫的,也可以是其他的插件。
分頁
XtraGrid提供了分頁欄,只需要把gridControl 的UseEmbeddedNavigator 屬性設為true則可。XtraGrid實現分頁功能有兩種辦法,一種則是利用XtraGrid本身的Server Mode模式 。但這種方式有諸多弊端:1)不能編輯、增加、刪除數據; 2)不能通過顯示值來進行排列和過濾數據(但可以用編輯值來進行這些操作);3)用戶排序時不觸發ColumnView.CustomColumnSort事件; 4)用戶分組時不觸發GridView.CustomColumnGroup事件; 5)用戶計算匯總時不觸發GridView.CustomSummaryCalculate事件; 6)在Server Mode模式下,數據表的主鍵不能由多個列組合而成。另一種方式就是利用SQL的分頁查詢。
jqGrid也提供了分頁欄,它的分頁方式與XtraGrid的第二種方式類似,采用SQL的分頁查詢。
個人認為采用SQL分頁查詢來實現分頁這方式比較好,即使XtraGrid的Server Mode模式不存在那麽多的弊端,使用了Server Mode模式,萬一將來的某一天更換了控件,甚至從C/S模式換成B/S模式,這樣要更改的代碼量會比利用SQL分頁查詢的代碼量要大。
數據源
XtraGrid的數據源綁定與傳統GridView的數據源綁定有所不同,經過綁定的操作後,XtraGrid上的數據仍然與數據源的數據同步,即修改了XtraGrid裏的數據,數據源的數據也同樣會被修改,修改了數據源的數據,XtraGrid裏的數據也會跟著被修改。而且它可以很方便地獲取到某一行記錄的對象,比如將一個List<People>綁定到XtraGrid中,XtraGrid可以通過 GetRow 方法獲取某行的People對象。還有一個優點就是若想批量修改某些數據,可直接對數據源進行操作,這樣就不需要遍歷單元格去修改。
jqGrid綁定了數據源之後,表格裏的數據與數據的數據就與GridView的情況一樣,兩者是不相關的,修改了一方的數據,對另一方沒有任何影響。
總結
綜合了jqGrid和XtraGrid的優點,個人認為一個好的網格類控件(或插件)除了有絢麗的外觀以外,還應該具備以下功能:
- 具有統計運算的功能;
- 具有父子表的功能;
- 對某列排序,分組,篩選功能;
- 提供工具欄方便增刪改查操作;
- 擁有多種分頁讀取數據功能(如傳統的通過分頁欄讀數據和通過滾動條控制分頁度數據);
- 支持多種類型的數據集合作為數據源;
- 能夠方便地獲取到單元格的信息;
- 對表格數據的更改能同步到原本綁定的數據源集合中;
- 提供簡便的方法對數據的格式進行驗證;
- 方便數據導入導出;
- 能夠方便地設置條帶狀的列;
- 提供多種編輯器;
- 模板允許多種編輯器自由組合使用,而且可以添加任意的控件(插件進入模板);
- 支持快捷鍵操作,減少用戶在鼠標與鍵盤上切換;
- 根據用戶需要對列的先後順序進行重新排列;
以上純屬個人看法,有什麽不足缺漏或錯誤的,歡迎指正。
比較JqGrid與XtraGrid