***小碎念***
每次選文章分類都覺得好累啊 ... QQ
網頁開發環環相扣,這次要放在哪個分類讓我傷了好陣子腦筋
也或許是還沒想清網誌的文章分類...不過暫時就先這樣了,之後也有可能考慮搬家~
有什麼建議的話也歡迎大家留言~
***進正題***
在任意的資訊系統中,很容易就是成千上萬筆的資料
以目前看過的設計方式大概有兩種 :
- 列表呈現加搜尋區域,點選目標資料進入編輯頁面 ( 參考畫面 : 農委會的有機農業資訊網 )
- 一進去就是空白的編輯畫面,設定搜尋條件之後帶出符合的數筆資料,慢慢翻吧~ ( 避免一次載入大量資料 )
覺得還是有疑惑的話,可以翻翻看各大電商平台 XD ( 順便年底前買一波 )
當然也有以上的變形或一些調整,但總之就一句。
系統列表不可免!!
那當然如此成千上萬萬的列表,大家的做法也各自不同
簡單的列表當然可以用div或table自己拚出。但如果以資訊系統網站來說,基本的需求以我所知會包含
- 排序 : 點按標題以不同的資料項目排序,參考Excel的篩選功能
- 分頁 : 當資料過多時,分頁不但避免使用者等待過久,也不用一次看到太大量的資料
- 編輯 : 如上所述,通常列表後我們會希望有地方可以看到更詳細齊全的資料,所以通常列表後都會有一個編輯按鈕 ( 或是更多有的沒的的按鈕 )
以上要自己處理的話多多少少有點微的辛苦。這還是基本的,其他什麼塞欄位啊、下拉啦,飄出提示框啦就先不提了
(有另外一種填資料的又被稱為Grid,此處就先不提)
所以網頁系統多如繁星的第三方列表套件就出現了~
簡單的引用並設定後,通常就能幫你生出一個美美的列表還符合以上所有條件!
所以今天就是要來介紹DataTables!
***為什麼是DataTables***
為什麼要介紹DataTables呢?他有什麼過人之處嗎?
欸沒有,目前不太確定,只是我剛好需要用到www
所以把使用過程記錄下來 ( 被揍
***什麼是DataTables***
DataTables是一款基於jQuery的套件。藉由DataTables,我們可以獲得一個互動並包含諸多功能的表格。
就官網上所列包含 : 分頁、即時搜尋、多列排序、主題化、擴展與各種資料來源、適用行動裝置與多語系,而且還開源!!
這麼多功能是不是讓人很心動啊 XD 更多範例細節請參閱 : DataTables官網
該公司除了DataTalbes之外,另有CloudTables跟Editor,之後若有使用再另外介紹~
***開始列表***
因為我使用的是Visual Studio + ASP.NET MVC,有關於開一個專案就略過不提,歡迎自行Google ( 或是留言給我 XD )
要使用DataTables,首先在官網下載DataTables安裝包。
這邊提供了很多相關所需的套件,這點滿貼心的,像是剉冰選配料的感覺 ( 不
因為是一開始使用,先從基本的開始,按照預設的選項,勾選 Choose a Styling framework 及 Package 的 DataTables(如下圖)。
因為我專案中已經匯入 jQuery 跟 Bootstrap,所以有需要的朋友可自行選用。
而Extensions的部分就都先不選擇。後面再開篇幅討論~
最後在頁面最下方選擇 Download 頁籤並點按Download files,會包出一個DataTables.zip。
解壓縮後,將檔案放置到專案對應的位置中(要記得加入至專案)
到這裡為止,我們完成了DataTables的準備工作 ( 呼~ ) , 終於可以開始寫程式了!!
在官網的首頁有很貼心地列出簡單三步驟!! 參考上圖
- 首先引用datatables js 與 css
- 調用此函式
- 得到一個完整的互動表格
下面還有一個按鈕包含完整的說明指南,那我們就開始試試看吧~
**原始的Table**
首先來看看什麼都沒套用的HTML原始Table長什麼樣子
原本的Table就長這樣,沒有下CSS的話連框線都沒有~
現在可是連手機都要畫花畫朵的時代,這樣的網頁怎麼出去見人?! ( 大誤
**套用DataTables**
依照官網步驟,引用好datatables js 與 css後
在Script替Table調用函式DataTable()
HTML的部分如下
以 jQuery 設定 Table 執行 DataTable 方法
最後的執行結果
看起來好像有模有樣的~ 但這時如果切到網頁開發者工具(網頁按F12),會發現其實有一個錯誤存在
Uncaught TypeError: Cannot read property 'mData' of undefined
這時可以透過dataTables逐步追查,或是直接查看官網 ~
從dataTables可以發現,因為 col 為 undefined 導致無法取得 mData
略過層層追蹤,最終原因其實就是沒有設定 thead
所以我們把thead加上後,再來看看結果
這部分其實在DataTables官網首頁的「Full Getting Started Guide」內有說明 : 「 For DataTables to be able to enhance an HTML table, the table must be valid, well formatted HTML, with a header (thead) and a single body (tbody). An optional footer (tfoot) can also be used. 」
所以對DataTables來說,thead及tbody是必須的,而tfoot則可視需求加入~
最後再補充一個狀況,如果在網頁開發者工具收到錯誤 : Cannot set property '_DT_CellIndex' of undefined 或 Cannot read property 'mData' of undefined
那麼請確認,thead的標題數量,是不是與內容儲存格<td>數量不一致。
這是因為DataTables在處理Table的過程中,因取不到儲存格出現了undefined所導致。
且分頁啊排序啊等功能,當然也不會出現囉~
***休息時間***
那前面所講的排序跟分頁功能,到此就幾乎都包含了。
不過目前的做法沒有使用ajax,所以在資料量過大時,載入速度會稍微有點遲緩~
同時我們可以透過右上角的文字框進行簡單的搜尋,並替表格設定不同的預設樣式。
一個簡易的列表頁,是不是出乎意料的簡單啊? 希望這篇可以幫助到有需要的朋友~
如果有說明不清楚的地方,歡迎大家留言詢問~
其他細節設定,就再另外開文章說明囉~