【SSH網上商城專案實戰06】基於DataGrid的資料顯示
轉自:https://blog.csdn.net/eson_15/article/details/51322262
1. 回顧一下第4節內容
在第4節中,我們使用EasyUI搭建好了左側選單欄,並且通過點選選單選項在右邊彈出對應的選項卡。這節我們來使用DataGrid把右邊的選項卡部分做好。先看一下第4節中最後的aindex.jsp檔案(也可參見第4節中的內容):
2. 建立DataGrid控制元件的幾種方式
DataGrid顯示資料是json格式的,所以我們首先要把從後臺獲取到的資料打包成Jason格式,然後傳到前臺來讓DataGrid來顯示,這一節我們先不從後臺獲取資料,先自己準備一個.json檔案,裡面有ison格式的資料,然後我們來讓DataGird顯示,先把顯示功能做好,再請求後臺資料。
我們先從EasyUI的參考文件中看一下DataGrid顯示的格式是什麼樣的,如下圖所示:
我們沿著參考文件往下看,我們發現DataGrid空間是通過<table>來建立的,有三種建立方式:
第一種:從現有的表格元素建立DataGrid,在HTML中定義列、行和資料。
第二種:通過<table>標籤建立DataGrid控制元件。在表格內使用<th>標籤定義列。
第三種:使用Javascript去建立DataGrid控制元件。
我們採取第三種,用js去建立DataGrid控制元件,首先我們得先準備一個儲存了json格式資料的檔案,在WebRoot/jquery-easyui-1.3.5/demo/datagrid/下面有幾個json檔案,我們選擇一個datagrid_data1.json,拷貝到WebRoot目錄下,修改一下引數,等會我們要來顯示這個json檔案裡的資料。如下:
-
{
"total":10,"rows":[
- { "code":"FI-SW-01","productname":"Koi","price":10.00},
- { "code":"K9-DL-01","productname":"Dalmation","price":12.00},
- { "code":"RP-SN-01","productname":"Rattlesnake","price":12.00},
- { "code":"RP-LI-02","productname":"Iguana","price":12.00},
- { "code":"FL-DSH-01","productname":"Manx","price":12.00},
- { "code":"FL-DSH-01","productname":"Manx","price":12.00},
- { "code":"FL-DLH-02","productname":"Persian","price":12.00},
- { "code":"FL-DLH-02","productname":"Persian","price":12.00},
- { "code":"AV-CB-01","productname":"Amazon Parrot","price":92.00},
- { "code":"AV-CB-03","productname":"Amazon Parrot","price":92.00}
- ]}
我們可以看到,json資料格式是:"key1": value1, "key2":value2。每個value裡面又可以是陣列,陣列中儲存新的Jason資料。
有了json檔案,我們接下來就可以設計DataGrid控制元件了,整個DataGrid都是在query.jsp中設計的,因為要顯示的內容就是query.jsp中的內容。我們來看看query.jsp頁面:
- <%@ page language= "java" import="java.util.*" pageEncoding="UTF-8"%>
- <html>
- <head>
- <%@ include file="/public/head.jspf" %>
- <script type="text/javascript">
- $( function(){
- $( '#dg').datagrid({
- //請求資料的url地址,後面會改成請求我們自己的url
- url: 'datagrid_data.json',
- loadMsg:'Loading......',
- queryParams:{type:''},//引數
- //width:300,
- fitColumns: true,//水平自動展開,如果設定此屬性,則不會有水平滾動條,演示凍結列時,該引數不要設定
- //顯示斑馬線
- striped: true,
- //當資料多的時候不換行
- nowrap: true,
- singleSelect:true, //如果為真,只允許單行顯示,全顯功能失效
- //設定分頁
- pagination: true,
- rowStyler: function(index,row){
- console.info("index" + index + "," + row)
- if(index % 2 == 0) {
- return '';
- } else {
- return '';
- }
- },
- //同列屬性,但是這些列將會凍結在左側,大小不會改變,當寬度大於250時,會顯示滾動條,但是凍結的列不在滾動條內
- frozenColumns:[[
- { field:'checkbox',checkbox:true},
- { field:'code',title:'編號',width:200}
- ]],
- //配置datagrid的列欄位
- //field:列欄位的名稱,與json的key捆綁
- //title:列標題,是顯示給人看的
- columns:[[
- { field:'productname',title:'類別名稱',width:100,
- //用來格式化當前列的值,返回的是最終的資料
- formatter: function(value,row,index){
- return "<span title=" + value + ">" + value + "</span>";
- }
- },
- { field:'price',title:'價格',width:100,
- styler: function(value,row,index){
- //設定當前單元格的樣式,返回的字串直接交給 style屬性
- //console.info("val:" + value + ",row:" + row + ",index:" + index)
- if (value < 20){
- return 'color:red;';
- }
- }
- }
- ]]
- });
- });
- </script>
- </head>
- <body>
- <table id="dg"></table>
- </body>
- </html>
3. DataGrid控制元件的屬性
我們可以看到,使用js去建立DataGrid控制元件的話,只要一個<table>標籤即可,主要都是在js中完成。DataGrid的控制元件很強大,這裡我們主要做一下基本的顯示,更多其他的功能可以參照EasyUI的開發文件。我們現在針對上面的query.jsp檔案做一下分析:
首先DataGrid控制元件有兩種屬性:一個是DataGrid屬性,還有一個是列屬性。顧名思義,DataGrid屬性是給整個DataGrid控制元件新增的屬性,而列屬性是針對某一列的。每中屬性有很多,這裡只做了一些基本的常用的屬性。
DataGrid屬性裡最重要的是columns屬性,它是一個數組,可以建立多列,見下面的截圖:
我們來看下columns屬性中有哪些細節:
列屬性中,field表示欄位名稱,對應與json資料的key,然後title是要顯示給使用者看的標題,見query.jsp檔案中,還有其他一些基本屬性可以參照EasyUI文件。列屬性中比較重要的也比較常用的兩個屬性是formatter和styler,分別是用來格式化當前列的值和設定單元格樣式的,我們主要來看一下這兩個屬性:
我們具體來分析一下上面query.jsp中的columns屬性中,如何使用這兩個列屬性的:
- { field:'productname',title:'類別名稱',width:100,
- //用來格式化當前列的值,返回的是最終的資料
- formatter: function(value,row,index){
- return "<span title=" + value + ">" + value + "</span>";//設定為滑鼠放上去顯示value值
- }
- },
- { field:'price',title:'價格',width:100,
- styler: function(value,row,index){
- //設定當前單元格的樣式,返回的字串直接交給 style屬性
- //console.info("val:" + value + ",row:" + row + ",index:" + index)
- if (value < 20){ //如果value值小於20
- return 'color:red;'; //將value值顯示為紅色
- }
- }
- }
然後我們再看看DataGrid控制元件的一些屬性:
url表示要顯示的資料來源,這裡設定成datagrid_data.json表示資料來源是這個json檔案,放在WebRoot目錄下了;
loadMsg表示載入資料過程中顯示的資訊;
queryParams表示傳給後臺的引數,在這裡用不到,因為我們目前還沒有和後臺關聯上,只是顯示一個json檔案,後面會用到;
fitColums設定為true後表示水平自動展開,自適應網格的寬度,如此設定,水平方向就不會有滾動條了,也不用設定寬度了;
width是寬度,如果資料過長顯示不下,水平方向就會出現滾動條;
striped設定為true後表示顯示斑馬線,這是一個顯示樣式,試一下便知;
nowrap設定為true後表示當資料多的時候不換行,否則某一行資料多的時候會換行,會比較難看;
pagination設定為true後表示開啟分頁功能;
singleSelect設定為true時,只允許勾選單行,全選功能失效,主要用於最前面一列的複選框;
frozenColums是為了設定凍結列,在frozenColums中設定的列,不會改變大小。裡面如果設定了{field:'checkbox',checkbox:true},表示這是個複選框列,給使用者勾選用的,如果設定了上面的singleSelect,那麼只能選擇一項,不能全選;
rowStyler是設定所有行的樣式的,兩個引數為行索引和行,上面設定的是偶數行是白色,奇數行是黃色。
等等……還有其他DataGrid控制元件的屬性,可以參考EasyUI的技術文件,在這裡就不一一解說了。
4. DataGrid資料顯示的效果
好了,完成了query.jsp後,我們重啟tomcat,然後進入到後臺,點選左側選單欄的類別管理,就會在右邊出現一個類別管理的選項卡,然後就會顯示我們指定的json資料,這個Jason資料是我們自己放在WebRoot目錄下的,後面我們將會把json和struts整合,動態的獲取從後臺傳過來的json資料。