• 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 原始码内容

     

    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 设定

    01.$('#dg').datagrid({
    02.title: 'CheckBox Selection on DataGrid',
    03.url: 'datagrid_data3.json',
    04. '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 设定程序如下:

    01.$('#dg').datagrid({
    02.title: 'CheckBox Selection on DataGrid',
    03.url: 'datagrid_data3.json',
    04. '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 都为勾选,


     

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


     

    程序如下:

    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.});

    最后的执行结果:






     

    方式一的完整 Javascript 程序:

    01.$('#dg').datagrid({
    02.title: 'CheckBox Selection on DataGrid',
    03.url: 'datagrid_data3.json',
    04. '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 的设定

    01.$('#dg').datagrid({
    02.title: 'CheckBox Selection on DataGrid',
    03.url: 'datagrid_data3.json',
    04. '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,如需要的话就必须再用其它的方式来做设定,不过这边就不介绍,


     

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

    程序如下:

    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 有勾选的数据值就可以沿用方式一的程序,

    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.});

    执行结果:
     






     

    完整 Javascript 程序如下:

     

    01.$(function(){
    02.$('#dg').datagrid({
    03.title: 'CheckBox Selection on DataGrid',
    04.url: 'datagrid_data3.json',
    05. '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.});
  • 相关阅读:
    Shell编程——基于IBM培训教程的总结
    flex上下固定中间滚动布局
    exe 转服务
    itextcsharp使用
    devices detect
    [转]Java api 全集 【API JDK1.6中文版】
    JavaScript 项目优化总结
    服务程序打包
    knockoutjs
    C#压缩《收藏》
  • 原文地址:https://www.cnblogs.com/wangluochong/p/7040988.html
Copyright © 2020-2023  润新知