zoukankan      html  css  js  c++  java
  • 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.});

        以上

    有时候不是我们失去了目标,而是失去了方向。
  • 相关阅读:
    unity的旋转
    Unity自带寻路Navmesh入门教程(三)
    Unity自带寻路Navmesh入门教程(二)
    unity自带寻路Navmesh入门教程(一)
    分隔字符串,计算一个字符串内数字个数、汉字个数、字母个数
    在 iTerm2 终端使用 command + ;会弹出最近使用的命令列表
    mac 电脑设置密码可以直接使用 passwd 这个命令
    Python 正则表达式
    设计模式学习 —— 模板方法
    Spring Boot 中使用 spring-boot-devtools (使用 Gradle 作为构建工具)
  • 原文地址:https://www.cnblogs.com/871735097-/p/3767804.html
Copyright © 2011-2022 走看看