2022-11-20

【jQuery】簡單好用的表格元件 EasyUI datagrid

參考資料 ----


EsayUI datagrid 元件可以造出功能強大又好看的表格,只要添加自己撰寫對應的程式碼,甚至可以做到直接在表格內 新增/修改/刪除 的功能;非商業用途的可用免費版。

因為我的資料來源為網站上的資料庫,所以需要 server 端的程式以回應 client 端傳來的請求,又因為只做瀏覽用,如果看倌有要在表格內直接 新增/修改/刪除 數據的需要,請自行另外研究囉~。

先到 EasyUI 下載壓縮包,解壓後,找到名為 locale 的目錄,裡面有個 easyui-lang-zh_TW.js ,這是正體中文語言檔,將它上傳至您網站指定目錄,在本例為 /js/


前端的程式 client.php
  1.  
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta name="keywords" content="" />
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  6. <title>datagrid demo</title>
  7. <meta name="description" content="datagrid demo" />
  8. <link rel="shortcut icon" href="/image/icon.png" />
  9. <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
  10. <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
  11.  
  12. <link rel="stylesheet" type="text/css" href="https://www.jeasyui.com/easyui/themes/default/easyui.css">
  13. <link rel="stylesheet" type="text/css" href="https://www.jeasyui.com/easyui/themes/icon.css">
  14. <link rel="stylesheet" type="text/css" href="https://www.jeasyui.com/easyui/themes/color.css">
  15. <link rel="stylesheet" type="text/css" href="https://www.jeasyui.com/easyui/demo/demo.css">
  16. <script type="text/javascript" src="https://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>
  17. <script type="text/javascript" src="/js/easyui-lang-zh_TW.js"></script><!-- 正體中文語言包-->
  18. </head>
  19. <body>
  20. <!-- <table id="table1" class="easyui-datagrid" style="width:1000px;height:auto" auto 表示 表格的高度自動調整 -->
  21. <!-- 若屬性中設了 fixColumns="true" 欄寬就被固定住了, 並且表格底部不會顯示橫向捲軸 -->
  22. <table id="table1" class="easyui-datagrid" style="width:100%;height:400px"<!-- 可以用 px 設定表格 寬/高, 也可以用 % 螢幕比例 -->
  23. url="uber_rec.php" <!-- 指定 server 端程式 -->
  24. pagination="true" <!-- 要有頁數導覽元件 -->
  25. rownumbers="true" <!-- 最左邊顯示列號 -->
  26. noWrap="true" <!-- 欄位內的文字不折行 -->
  27. striped="true" <!-- 單偶列不同背景色 -->
  28. singleSelect="true" <!-- 滑鼠點擊的列會高亮度顯示 -->
  29. pageList=[30,60,90] <!-- 每頁顯示的列數選項 -->
  30. pageSize=30 > <!-- 預設每頁顯示 30 筆記錄 -->
  31. <thead>
  32. <tr>
  33. <th field="欄位1" width="180">欄位1 在 datagrid 的顯示名稱</th>
  34. <th field="欄位2" width="200">欄位2 在 datagrid 的顯示名稱</th>
  35. ...
  36. ...
  37. </tr>
  38. </thead>
  39. </table>
  40. </div>
  41. </body>
  42. </html>
  43.  
  44.  


server 端的程式 get_rec.php
  1.  
  2. <?php
  3. // 建立 PDO
  4. $dsn = 'mysql:dbname=資料庫名;host=localhost;charset=utf8;';
  5. $user = 'MySQL帳戶名';
  6. $password = '密碼';
  7. $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
  8. try
  9. { // 建立資料連線
  10. $pdo = new PDO($dsn, $user, $password, $options);
  11. }
  12. catch (PDOException $e)
  13. {
  14. echo 'connection failed';
  15. exit;
  16. }
  17.  
  18. $result = array();
  19.  
  20. // 撈記錄總筆數
  21. $sql = "SELECT COUNT(*) cnt FROM 資料表A";
  22. $pdoStat = $pdo->prepare($sql);
  23. $pdoStat->execute();
  24. $rs = $pdoStat->fetch();
  25. $result["total"] = $rs['cnt']; // EasyUI 規定的 jason 元素名
  26.  
  27.  
  28. $iRows = isset($_POST['rows']) ? intval($_POST['rows']) : 30; // client 端傳來的一頁要顯示的記錄筆數, 預設 30
  29. $iOffset = isset($_POST['page']) ? (intval($_POST['page'])-1)*$iRows : 0; // client 端傳來的一頁要顯示第幾頁, 預設 0
  30. $sql = "SELECT * FROM 資料表A ORDER BY 排序欄位 LIMIT $iRows OFFSET $iOffset";
  31. $pdoStat = $pdo->prepare($sql);
  32. $pdoStat->execute();
  33. $rs = $pdoStat->fetchAll();
  34.  
  35. $recs = array();
  36.  
  37. if(count($rs)>0)
  38. {
  39. foreach($rs as $row)
  40. {
  41. array_push($recs, ['欄位1'=>$row['欄位1'], '欄位2'=>$row['欄位2'], ...]);
  42. }
  43. $result["rows"] = $recs; // EasyUI 規定的 jason 元素名
  44. }
  45. echo json_encode($result);
  46. ?>
  47.  


沒有留言:

張貼留言