jQuery插件SlickGrid --- 保存用户的列定义

 

数据库表定义的话大概是这样的

表 t_usersetting

id  varchar2(50)  PK

userid  varchar2(50)

pageid  varchar2(50)

 

 

表t_slickgridcolumndefinition

id  varchar2(50)  PK

columnid  varchar2(50)

columnwidth  NUMBER(3)

columnshow  char(1)

usersettingid  varchar2(50)  FK 

 

 

JSP代码

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
 4 <c:set var="ctx" value="<%=request.getContextPath()%>"></c:set>
 5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 6 <html>
 7 <head>
 8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 9 <title>SlickGrid</title>
10 
11 <script src="${ctx}/js/SlickGrid-master/lib/firebugx.js"></script>
12 <script src="${ctx}/js/SlickGrid-master/lib/jquery-1.7.min.js"></script>
13 <script src="${ctx}/js/SlickGrid-master/lib/jquery-ui-1.8.16.custom.min.js"></script>
14 <script src="${ctx}/js/SlickGrid-master/lib/jquery.event.drag-2.2.js"></script>
15 
16 <script src="${ctx}/js/SlickGrid-master/slick.core.js"></script>
17 <script src="${ctx}/js/SlickGrid-master/plugins/slick.checkboxselectcolumn.js"></script>
18 <script src="${ctx}/js/SlickGrid-master/plugins/slick.autotooltips.js"></script>
19 <script src="${ctx}/js/SlickGrid-master/plugins/slick.cellrangedecorator.js"></script>
20 <script src="${ctx}/js/SlickGrid-master/plugins/slick.cellrangeselector.js"></script>
21 <script src="${ctx}/js/SlickGrid-master/plugins/slick.cellcopymanager.js"></script>
22 <script src="${ctx}/js/SlickGrid-master/plugins/slick.cellselectionmodel.js"></script>
23 <script src="${ctx}/js/SlickGrid-master/plugins/slick.rowselectionmodel.js"></script>
24 <script src="${ctx}/js/SlickGrid-master/controls/slick.columnpicker.js"></script>
25 <script src="${ctx}/js/SlickGrid-master/slick.formatters.js"></script>
26 <script src="${ctx}/js/SlickGrid-master/slick.editors.js"></script>
27 <script src="${ctx}/js/SlickGrid-master/slick.grid.js"></script>
28 <script src="${ctx}/js/SlickGrid-master/slick.dataview.js"></script>
29 <script src="${ctx}/js/SlickGrid-master/controls/slick.pager.js"></script>
30 <script src="${ctx}/index1.js"></script>
31     
32 <link rel="stylesheet" href="${ctx}/js/SlickGrid-master/slick.grid.css" type="text/css"/>
33 <link rel="stylesheet" href="${ctx}/js/SlickGrid-master/css/smoothness/jquery-ui-1.8.16.custom.css" type="text/css"/>
34 <link rel="stylesheet" href="${ctx}/js/SlickGrid-master/controls/slick.pager.css" type="text/css"/>
35 <link rel="stylesheet" href="${ctx}/js/SlickGrid-master/examples.css" type="text/css"/>
36 <link rel="stylesheet" href="${ctx}/js/SlickGrid-master/controls/slick.columnpicker.css" type="text/css"/>
37 </head>
38 <body>
39     <div id="myGrid" style="width:1000px; height:500px; border:1px solid black; margin:auto;"></div>
40     <div style="width:100%; height:20px;"></div>
41     <div style="width:1000px; height:100px; margin:auto;">
42         <input type="button" value="saveColumnsSetting" onclick="saveColumnsSetting();" />
43         <input type="button" value="resetColumnsSetting" onclick="resetColumnsSetting();" />
44     </div>
45 </body>
46 <script>
47 var ctx = ${ctx};
48 </script>
49 </html>

 

js代码

  1 var grid;
  2 var defaultColumns = [];   // 默认设置
  3 
  4 var options = {
  5     editable : true,
  6     enableCellNavigation : true,
  7     asyncEditorLoading : false,
  8     autoEdit : false
  9 };
 10 var data = [];
 11 
 12 var columnPicker;
 13 $(function() {
 14     data = createData();
 15     defaultColumns = createColumns();
 16     
 17     var checkboxSelectColumn = new Slick.CheckboxSelectColumn(options);
 18     defaultColumns.unshift(checkboxSelectColumn.getColumnDefinition());
 19     
 20     /*
 21      * 获取用户设置信息
 22      */
 23     var userSettings = queryUserColumnsSetting();
 24     // 这个设置给grid
 25     var showColumns = [];
 26     if(userSettings && userSettings.columnSetting && userSettings.columnSetting.length!=0){
 27         for(var i = 0;i<userSettings.columnSetting.length;i++){
 28             for(var j = 0;j<defaultColumns.length;j++){
 29                 if(userSettings.columnSetting[i][‘id‘]==defaultColumns[j][‘id‘] && userSettings.columnSetting[i].show==true){
 30                     showColumns.push(defaultColumns[j]);
 31                 }
 32             }
 33         }
 34     }
 35     
      if(showColumns.length==0){
         showColumns = [].concat(defaultColumns); 
      }

36 grid = new Slick.Grid("#myGrid", data, showColumns, options); 37 38 var rowSelectionModel = new Slick.RowSelectionModel({selectActiveRow : false}); 39 grid.setSelectionModel(rowSelectionModel); 40 grid.registerPlugin(checkboxSelectColumn); 41 42 columnPicker = new Slick.Controls.ColumnPicker(defaultColumns, grid, options); 43 44 grid.onHeaderContextMenu.subscribe(function(e, args) { 45 // 隐藏checkbox,不让进行选择 46 var labels = $(".slick-columnpicker").find(‘li‘).find(‘label‘); 47 $(labels).each(function(index, item) { 48 if (item.innerText == "<input type=‘checkbox‘>") { 49 item.parentNode.remove(item); 50 } 51 }) 52 }); 53 54 // 提示插件,当文本的内容超过了列的宽度之后,会自动提示,没有超过的不会提示 55 grid.registerPlugin(new Slick.AutoTooltips({enableForHeaderCells : true})); 56 57 58 }) 59 60 function createColumns() { 61 var defaultColumns = []; 62 defaultColumns.push({ 63 id : ‘id‘, 64 name : ‘id‘, 65 field : ‘id‘ 66 }); 67 defaultColumns.push({ 68 id : ‘name‘, 69 name : ‘name‘, 70 field : ‘name‘ 71 }); 72 defaultColumns.push({ 73 id : ‘sex‘, 74 name : ‘sex‘, 75 field : ‘sex‘ 76 }); 77 defaultColumns.push({ 78 id : ‘age‘, 79 name : ‘age‘, 80 field : ‘age‘ 81 }); 82 defaultColumns.push({ 83 id : ‘country‘, 84 name : ‘country‘, 85 field : ‘country‘ 86 }); 87 defaultColumns.push({ 88 id : ‘province‘, 89 name : ‘province‘, 90 field : ‘province‘ 91 }); 92 defaultColumns.push({ 93 id : ‘city‘, 94 name : ‘city‘, 95 field : ‘city‘ 96 }); 97 defaultColumns.push({ 98 id : ‘email‘, 99 name : ‘email‘, 100 field : ‘email‘ 101 }); 102 defaultColumns.push({ 103 id : ‘qq‘, 104 name : ‘qq‘, 105 field : ‘qq‘ 106 }); 107 defaultColumns.push({ 108 id : ‘postcode‘, 109 name : ‘postcode‘, 110 field : ‘postcode‘ 111 }); 112 defaultColumns.push({ 113 id : ‘phone‘, 114 name : ‘phone‘, 115 field : ‘phone‘ 116 }); 117 118 return defaultColumns; 119 } 120 121 122 function createData(){ 123 var data = []; 124 for (var i = 0; i < 1000; i++) { 125 data.push({ 126 id:i, 127 name:‘name‘+i, 128 sex:i % 2 == 0 ? "Male" : "Female", 129 age:parseInt(Math.random() * (50 - 18 + 1) + 18), 130 city:‘SHENZHEN‘, 131 province:‘GD‘, 132 country:‘CHINA‘, 133 email:‘xxxx‘+i+‘@163.com‘, 134 qq:Math.random() * 100000000 + "", 135 postcode:‘518049‘, 136 phone:Math.random() * 100000000 + "" 137 }); 138 } 139 return data; 140 } 141 142 /** 143 * 保存用户的列设置 144 * 主要包括以下几点: 145 * 列的顺序、列宽、列显示 146 */ 147 function saveColumnsSetting() { 148 149 var saveData = {}; 150 saveData.columnSetting = []; 151 saveData.userid = "userid"; 152 saveData.pageid = "pageid"; 153 154 155 var showcount = 0; 156 var hiddencount = 0; 157 158 var allColumns = columnPicker.getAllColumns(); 159 var showColumns = grid.getColumns(); 160 for(var i = 0;i<allColumns.length;i++){ 161 for(var j = 0;j<showColumns.length;j++){ 162 if(allColumns[i][‘id‘]==showColumns[j][‘id‘]){ 163 saveData.columnSetting.push({id:allColumns[i][‘id‘],width:allColumns[i].width,show:true}); 164 showcount++; 165 break; 166 }else if (j==showColumns.length-1 && allColumns[i][‘id‘]!=showColumns[j][‘id‘]){ 167 saveData.columnSetting.push({id:allColumns[i][‘id‘],width:allColumns[i].width,show:false}); 168 hiddencount++; 169 } 170 } 171 } 172 173 /* 174 * 到时候把saveData作为参数传递给controller保存到数据库,待下一次进入到页面的时候,首先就要检查用户是否已经对该页面进行了自定义的列设置 175 */ 176 alert("show columns count : " + showcount + "\n hidden columns count :" + hiddencount ); 177 } 178 179 /** 180 * 重置列定义 181 */ 182 function resetColumnsSetting(){ 183 grid.setColumns(defaultColumns); 184 if(window.confirm("是否丢弃用户列设置?")){ 185 // TODO 删掉数据库信息 186 } 187 } 188 189 190 /* 191 * 查询用户的设置 192 * 这里就不查询数据库了,只要模拟一下就好 193 */ 194 function queryUserColumnsSetting(){ 195 var userSetting = {}; 196 userSetting.userid ="userid"; 197 userSetting.pageid = "pageid"; 198 199 userSetting.columnSetting = []; 200 userSetting.columnSetting.push({id:‘_checkbox_selector‘,width:30,show:true}); 201 userSetting.columnSetting.push({id:‘id‘,width:100,show:false}); 202 userSetting.columnSetting.push({id:‘name‘,width:110,show:false}); 203 userSetting.columnSetting.push({id:‘sex‘,width:120,show:false}); 204 userSetting.columnSetting.push({id:‘country‘,width:120,show:true}); 205 userSetting.columnSetting.push({id:‘province‘,width:120,show:true}); 206 userSetting.columnSetting.push({id:‘city‘,width:120,show:true}); 207 userSetting.columnSetting.push({id:‘age‘,width:120,show:true}); 208 userSetting.columnSetting.push({id:‘email‘,width:120,show:true}); 209 userSetting.columnSetting.push({id:‘qq‘,width:120,show:true}); 210 userSetting.columnSetting.push({id:‘postcode‘,width:120,show:true}); 211 userSetting.columnSetting.push({id:‘phone‘,width:120,show:true}); 212 213 return userSetting; 214 }

 

 

 1 public class SlickGridColumnDefinition {
 2     private String columnid;
 3     private String columnWidth;
 4     private boolean show;
 5 
 6     public String getColumnid() {
 7         return columnid;
 8     }
 9 
10     public void setColumnid(String columnid) {
11         this.columnid = columnid;
12     }
13 
14     public String getColumnWidth() {
15         return columnWidth;
16     }
17 
18     public void setColumnWidth(String columnWidth) {
19         this.columnWidth = columnWidth;
20     }
21 
22     public boolean isShow() {
23         return show;
24     }
25 
26     public void setShow(boolean show) {
27         this.show = show;
28     }
29 
30 }
 1 public class UserSettings {
 2     private String userid;
 3     private String pageid;
 4     private List<SlickGridColumnDefinition> cs;
 5 
 6     public String getUserid() {
 7         return userid;
 8     }
 9 
10     public void setUserid(String userid) {
11         this.userid = userid;
12     }
13 
14     public String getPageid() {
15         return pageid;
16     }
17 
18     public void setPageid(String pageid) {
19         this.pageid = pageid;
20     }
21 
22     public List<SlickGridColumnDefinition> getCs() {
23         return cs;
24     }
25 
26     public void setCs(List<SlickGridColumnDefinition> cs) {
27         this.cs = cs;
28     }
29 
30 }

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。