jQuery EasyUI DataGrid Checkbox 数据设定与取值

纯粹做个记录,以免日后忘记该怎么设定。

这一篇将会说明两种使用 jQuery EasyUI DataGrid 的 Checkbox 设定方式,以及在既有数据下将 checked 为 true 的该笔数据列的 Checkbox 设定为 Checked,另外就是两种 Checkbox 设定方式下如何取得有勾选的数据。


有关 jQuery EasyUI DataGrid 的相关资料,可以前往官网查看,

jQuery EasyUI 官网
jQuery EasyUI Documentation
DataGrid Demo
CheckBox select on DataGrid

使用的范例 JSON 数据:
 

01. {
02.   "total": 4,
03.   "rows": [
04.     {
05.       "productid": "FI-SW-01",
06.       "productname": "Koi",
07.       "unitcost": 10.00,
08.       "status": "P",
09.       "listprice": 36.50,
10.       "attr1": "Large",
11.       "itemid": "EST-1",
12.       "checked": true
13.     },
14.     {
15.       "productid": "K9-DL-01",
16.       "productname": "Dalmation",
17.       "unitcost": 12.00,
18.       "status": "P",
19.       "listprice": 18.50,
20.       "attr1": "Spotted Adult Female",
21.       "itemid": "EST-10",
22.       "checked": true
23.     },
24.     {
25.       "productid": "RP-SN-01",
26.       "productname": "Rattlesnake",
27.       "unitcost": 12.00,
28.       "status": "P",
29.       "listprice": 38.50,
30.       "attr1": "Venomless",
31.       "itemid": "EST-11",
32.       "checked": true
33.     },
34.     {
35.       "productid": "RP-SN-01",
36.       "productname": "Rattlesnake",
37.       "unitcost": 12.00,
38.       "status": "P",
39.       "listprice": 26.50,
40.       "attr1": "Rattleless",
41.       "itemid": "EST-12",
42.       "checked": false
43.     }
44.   ]
45. }

设定方式一:使用预设的设定方式
网页的 HTML 原始码内容

 

view source print ?
01. <body>
02.     <h2>Custom CheckBox on DataGrid</h2>
03.       
04.     <input type="button" id="ButonGetCheck" value="Get Checked" />
05.     <br/><br/>
06.       
07.     <table id="dg"></table>
08.       
09. </body>

我是习惯把 DataGrid 的相关设定放在 Javascript 程序中,因为这会比直接在 HTML 的 Table Tag 使用属性设定的方式还具有弹性,

Javascript 程序中的 DataGrid 设定


view source print ?
01. $('#dg').datagrid({
02.     title: 'CheckBox Selection on DataGrid',
03.     url: 'datagrid_data3.json',
04.     width: '700',
05.     rownumbers: true,
06.     columns:[[
07.         { field:'ck',checkbox:true }, 
08.         { field: 'productid', title: 'productid' },
09.         { field: 'productname', title: 'productname' },
10.         { field: 'unitcost', title: 'unitcost' },
11.         { field: 'status', title: 'status' },
12.         { field: 'listprice', title: 'listprice' },
13.         { field: 'itemid', title: 'itemid' }
14.     ]],
15.     singleSelect: false,
16.     selectOnCheck: true,
17.     checkOnSelect: true
18. });

设定完成后的页面如下:

 


 

但是我们的 JSON 数据里有个字段是「checked」,这个字段的数据 true / false 就是用来设定 Checkbox 是否勾选,而设定的动作必须要在 DataGrid 加载数据完成后再去执行,这边会使用到 jQuery 的 each 去逐一检查每个数据列的的数据内容,假如 checked 为 true,那就使用「checkRow」这个 Method 将该数据列的 Checkbox 设为勾选的状态,

 

\
 

修改后的 DataGrid 设定程序如下:

 

view source print ?
01. $('#dg').datagrid({
02.     title: 'CheckBox Selection on DataGrid',
03.     url: 'datagrid_data3.json',
04.     width: '700',
05.     rownumbers: true,
06.     columns:[[
07.         { field:'ck',checkbox:true }, 
08.         { field: 'productid', title: 'productid' },
09.         { field: 'productname', title: 'productname' },
10.         { field: 'unitcost', title: 'unitcost' },
11.         { field: 'status', title: 'status' },
12.         { field: 'listprice', title: 'listprice' },
13.         { field: 'itemid', title: 'itemid' }
14.     ]],
15.     singleSelect: false,
16.     selectOnCheck: true,
17.     checkOnSelect: true,
18.     onLoadSuccess:function(data){                    
19.         if(data){
20.             $.each(data.rows, function(index, item){
21.                 if(item.checked){
22.                     $('#dg').datagrid('checkRow', index);
23.                 }
24.             });
25.         }
26.     }                 
27. });

重新执行页面后就可以看到 checked 为 true 的数据列 Checkbox 都为勾选,

 

jQuery EasyUI DataGrid Checkbox 数据设定与取值_第1张图片
 

再来就是要取得勾选的数据值,这边也是使用 DataGrid 所提供的 Method「getChecked」 www.it165.net

 


 

程序如下:

 

view source print ?
1. $('#ButonGetCheck').click(function(){
2.     var checkedItems = $('#dg').datagrid('getChecked');
3.     var names = [];
4.     $.each(checkedItems, function(index, item){
5.         names.push(item.productname);
6.     });                
7.     console.log(names.join(","));
8. });

最后的执行结果:

 

jQuery EasyUI DataGrid Checkbox 数据设定与取值_第2张图片



jQuery EasyUI DataGrid Checkbox 数据设定与取值_第3张图片
 

方式一的完整 Javascript 程序:

 

view source print ?
01. $('#dg').datagrid({
02.     title: 'CheckBox Selection on DataGrid',
03.     url: 'datagrid_data3.json',
04.     width: '700',
05.     rownumbers: true,
06.     columns:[[
07.         { field:'ck',checkbox:true }, 
08.         { field: 'productid', title: 'productid' },
09.         { field: 'productname', title: 'productname' },
10.         { field: 'unitcost', title: 'unitcost' },
11.         { field: 'status', title: 'status' },
12.         { field: 'listprice', title: 'listprice' },
13.         { field: 'itemid', title: 'itemid' }
14.     ]],
15.     singleSelect: false,
16.     selectOnCheck: true,
17.     checkOnSelect: true,
18.     onLoadSuccess:function(data){                    
19.         if(data){
20.             $.each(data.rows, function(index, item){
21.                 if(item.checked){
22.                     $('#dg').datagrid('checkRow', index);
23.                 }
24.             });
25.         }
26.     }                 
27. });
28.    
29. $('#ButonGetCheck').click(function(){
30.     var checkedItems = $('#dg').datagrid('getChecked');
31.     var names = [];
32.     $.each(checkedItems, function(index, item){
33.         names.push(item.productname);
34.     });                
35.     console.log(names.join(","));
36. });

设定方式二:不使用预设的设定方式与 Method

这个设定的方式应该是在 jQuery EasyUI 1.3 之前所使用的,因为早期的版本并没有足够的设定方式与 Method 让使用者可以去增加 Checkbox 的项目,这边所使用的 JSON 数据以及 HTML 原始码都跟设定方式一的内容是一样的,不一样的地方在于 Javascript 程序的部份,

先看 DataGrid 的设定

 

view source print ?
01. $('#dg').datagrid({
02.     title: 'CheckBox Selection on DataGrid',
03.     url: 'datagrid_data3.json',
04.     width: '700',
05.     rownumbers: true,
06.     columns:[[
07.         {field:'checked',formatter:function(value,row,index){ 
08.             if(row.checked){
09.                 return '<input type="checkbox" name="DataGridCheckbox" checked="checked">'
10.             }
11.             else{
12.                 return '<input type="checkbox" name="DataGridCheckbox">'
13.             }
14.         }}, 
15.         { field: 'productid', title: 'productid' },
16.         { field: 'productname', title: 'productname' },
17.         { field: 'unitcost', title: 'unitcost' },
18.         { field: 'status', title: 'status' },
19.         { field: 'listprice', title: 'listprice' },
20.         { field: 'itemid', title: 'itemid' }
21.     ]],
22.     singleSelect: true
23. });

这边的 Checkbox 设定则是使用 formatter 的方式,类似 ASP.NET GridView 的 ItemTemplate 设定方式,判断每个数据列的 checked 字段数据是否为 true,如 checked 为 true 则回传一个有勾选的 Checkbox,不过这样的设定方式就不会在 DataGrid 的字段名称列出现可让使用者全选的 Checkbox,如需要的话就必须再用其它的方式来做设定,不过这边就不介绍,

 

jQuery EasyUI DataGrid Checkbox 数据设定与取值_第4张图片
 

接着就是取得有勾选的数据值,因为这里是使用自己加入 checkbox tag 的方式,所以就无法使用 DataGrid 所提供的 getChecked 方法,而是必须要另外写程序来处理,可以使用 extend 的方式去扩充 DataGrid 的方法,

 

程序如下:

view source print ?
01. $.extend($.fn.datagrid.methods, {
02.     getChecked: function (jq) {
03.         var rr = [];
04.         var rows = jq.datagrid('getRows');
05.         jq.datagrid('getPanel').find('div.datagrid-cell input:checked').each(function () {
06.             var index = $(this).parents('tr:first').attr('datagrid-row-index');
07.             rr.push(rows[index]);
08.         });
09.         return rr;
10.     }
11. });

这么一来在取得 DataGrid 的 Checkbox 有勾选的数据值就可以沿用方式一的程序,

view source print ?
1. $('#ButonGetCheck').click(function(){
2.     var checkedItems = $('#dg').datagrid('getChecked');
3.     var names = [];
4.     $.each(checkedItems, function(index, item){
5.         names.push(item.productname);
6.     });                
7.     console.log(names.join(","));
8. });

执行结果:
 

jQuery EasyUI DataGrid Checkbox 数据设定与取值_第5张图片

jQuery EasyUI DataGrid Checkbox 数据设定与取值_第6张图片

jQuery EasyUI DataGrid Checkbox 数据设定与取值_第7张图片
 

完整 Javascript 程序如下:

 

view source print ?
01. $(function(){
02.     $('#dg').datagrid({
03.         title: 'CheckBox Selection on DataGrid',
04.         url: 'datagrid_data3.json',
05.         width: '700',
06.         rownumbers: true,
07.         columns:[[
08.             {field:'checked',formatter:function(value,row,index){ 
09.                 if(row.checked){
10.                     return '<input type="checkbox" name="DataGridCheckbox" checked="checked">'
11.                 }
12.                 else{
13.                     return '<input type="checkbox" name="DataGridCheckbox">'
14.                 }
15.             }}, 
16.             { field: 'productid', title: 'productid' },
17.             { field: 'productname', title: 'productname' },
18.             { field: 'unitcost', title: 'unitcost' },
19.             { field: 'status', title: 'status' },
20.             { field: 'listprice', title: 'listprice' },
21.             { field: 'itemid', title: 'itemid' }
22.         ]],
23.         singleSelect: true
24.     });
25.       
26.     $('#ButonGetCheck').click(function(){
27.         var checkedItems = $('#dg').datagrid('getChecked');
28.         var names = [];
29.         $.each(checkedItems, function(index, item){
30.             names.push(item.productname);
31.         });                
32.         console.log(names.join(","));
33.     });
34. });
35.    
36. $.extend($.fn.datagrid.methods, {
37.     getChecked: function (jq) {
38.         var rr = [];
39.         var rows = jq.datagrid('getRows');
40.         jq.datagrid('getPanel').find('div.datagrid-cell input:checked').each(function () {
41.             var index = $(this).parents('tr:first').attr('datagrid-row-index');
42.             rr.push(rows[index]);
43.         });
44.         return rr;
45.     }
46. });

你可能感兴趣的:(jQuery EasyUI DataGrid Checkbox 数据设定与取值)