详解jquery easyui之datagrid使用参考


Posted in Javascript onDecember 05, 2016

本文介绍了jquery easyui之datagrid使用,具体如下:

创建datagrid

在页面上添加一个div或table标签,然后用jquery获取这个标签,并初始化一个datagrid。代码如下:

页面上的div标签:

<div id="magazineGrid">
</div>

js代码:

$('#magazineGrid').datagrid({
  height: 340,
  url: 'url',
  method: 'POST',
  queryParams: { 'id': id },
  idField: '产品ID',
  striped: true,
  fitColumns: true,
  singleSelect: false,
  rownumbers: true,
  pagination: false,
  nowrap: false,
  pageSize: 10,
  pageList: [10, 20, 50, 100, 150, 200],
  showFooter: true,
  columns: [[
    { field: 'ck', checkbox: true },
    { field: '刊名', title: '刊名', width: 180, align: 'left' },
    { field: '类别', title: '类别', width: 150, align: 'left' },
    { field: '月份', title: '月份', width: 100, align: 'left' },
    { field: '期次', title: '期次', width: 100, align: 'left' },
    { field: '价格', title: '价格', width: 100, align: 'right' },
    { field: '订阅数', title: '订阅数', width: 100, align: 'right' },
    { field: '库存数', title: '库存数', width: 100, align: 'right' },
    { field: '邮寄方式', title: '邮寄方式', width: 80, align: 'left' },
    { field: '数量', title: '数量', width: 80, align: 'left',
      editor: {
        type: 'numberbox',
        options: {
          min: 0,
          precision: 0
        }
      }
    }
  ]],
  onBeforeLoad: function (param) {
  },
  onLoadSuccess: function (data) {
    
  },
  onLoadError: function () {
    
  },
  onClickCell: function (rowIndex, field, value) {
    
  }
});

ajax请求返回的数据格式

datagrid在创建完成后会根据url请求数据,这是通过ajax来完成的。服务器在完成请求处理后应返回带有rows属性的数据,如果用到分页,还需要有total属性:

var rst = new { total = iTotalCount, rows = entityList };

说到ajax请求,难免需要在请求的时候传入一些查询条件,我通常是在onBeforeLoad事件中添加查询条件的:

onBeforeLoad: function (param) {
  var bId = $("#txtBId").val();
  var AllSearchKey = $("#txtAllSearchKey").val();
  param.bId = bId;
  param.AllSearchKey = AllSearchKey;
}

 分页处理

如果要启用分页,在datagrid配置中,首先要加入如下配置:

pagination: true,

这样一来我们的datagrid底部就会出现一个分页工具栏。

这个时侯,datagrid在请求数据的时候会自动的添加分页的信息:

  • page:当前请求的页码
  • rows:每页要显示的行数

在服务器端获取到这两个参数值,然后通过获取数据库中的总数据行数来完成数据处理。

关于checkbox列

上面的js代码创建的datagrid本身已经添加了checkbox列,就是第一列。checkbox列将会自适应宽度。

{ field: 'ck', checkbox: true },

 关于rownumber列

rownumber列的配置是在全局设置的,如果设置为true则会添加一列来显示行号。

rownumbers: true

行编辑功能的实现

datagrid本身提供了行编辑的功能。只需要两个步骤:

1.设置列的editor属性

2.手动触发编辑

第一步,我们需要在column配置中指明editor,editor有两个属性,type和options,有效的type字符串有:

text,textarea,checkbox,numberbox,validatebox,datebox,combobox,combotree

options则对应这些控件的具体配置,包括事件等。

editor: {
  type: 'numberbox',
  options: {
    min: 0,
    precision: 0
  }
}

如果不需要特殊的options配置,直接将type字符串赋给editor即可。

editor:'text'

第二步,我们需要监听datagrid的onRowClick事件,或者onCellClick事件,我更愿意监听onCellClick事件,可以根据点击不同的字段来进入编辑模式,并设置单元格编辑控件的focus。

onClickCell: function (rowIndex, field, value) {
  beginEditing(rowIndex, field, value)
}

这里调用了beginEditing方法:

var editIndex = undefined;
var beginEditing = function (rowIndex, field, value) {
  if (field != "数量")
    return;

  if (rowIndex != editIndex) {
    if (endEditing()) {
      $('#magazineGrid').datagrid('beginEdit', rowIndex);
      editIndex = rowIndex;

      var ed = $('#magazineGrid').datagrid('getEditor', { index: rowIndex, field: '数量' });
      $(ed.target).focus().bind('blur', function () {
        endEditing();
      });
    } else {
      $('#magazineGrid').datagrid('selectRow', editIndex);
    }
  }
}
var endEditing = function () {
  if (editIndex == undefined) { return true }
  if ($('#magazineGrid').datagrid('validateRow', editIndex)) {
    var ed = $('#magazineGrid').datagrid('getEditor', { index: editIndex, field: '数量' });
    var number = $(ed.target).numberbox('getValue');
    $('#magazineGrid').datagrid('getRows')[editIndex]['数量'] = number;
    $('#magazineGrid').datagrid('endEdit', editIndex);
    $('#magazineGrid').datagrid('selectRow', editIndex);
    editIndex = undefined;
    return true;
  } else {
    return false;
  }
}

列格式化输出 formatter

在列的配种中设置formatter

formatter: function (value, row, index) {
  if (row.user) {
    return row.user.name;
  } else {
    return value;
  }
}

 使用工具栏

toolbar: [{
  text: 'Add',
  iconCls: 'icon-add',
  handler: function () { alert('add') }
}, {
  text: 'Cut',
  iconCls: 'icon-cut',
  handler: function () { alert('cut') }
}, '-', {
  text: 'Save',
  iconCls: 'icon-save',
  handler: function () { alert('save') }
}],

 使用CardView效果

cardView效果是这样的:

详解jquery easyui之datagrid使用参考

cardView的代码:

var cardview = $.extend({}, $.fn.datagrid.defaults.view, {
  renderRow: function (target, fields, frozen, rowIndex, rowData) {
    var cc = [];
    cc.push('<td colspan=' + fields.length + ' style="padding:10px 5px;border:0;">');
    if (!frozen) {
      var aa = rowData.itemid.split('-');
      var img = 'shirt' + aa[1] + '.gif';
      cc.push('<img src="images/' + img + '" style="width:150px;float:left">');
      cc.push('<div style="float:left;margin-left:20px;">');
      for (var i = 0; i < fields.length; i++) {
        var copts = $(target).datagrid('getColumnOption', fields[i]);
        cc.push('<p><span class="c-label">' + copts.title + ':</span> ' + rowData[fields[i]] + '</p>');
      }
      cc.push('</div>');
    }
    cc.push('</td>');
    return cc.join('');
  }
});
$(function () {
  $('#tt').datagrid({
    view: cardview
  });
});

cardView其实是使用了datagrid的view配置,重写了其默认的renderRow方法。基于这种实现,我们可以显示更多样式的view。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
form表单中去掉默认的enter键提交并绑定js方法实现代码
Apr 01 Javascript
js中方法重载如何实现?以及函数的参数问题
Aug 01 Javascript
关于Javascript作用域链的八点总结
Dec 06 Javascript
JavaScript Array对象扩展indexOf()方法
May 09 Javascript
js实现当前输入框高亮显示的方法
Aug 19 Javascript
js中string和number类型互转换技巧(分享)
Nov 28 Javascript
详解Angular6 热加载配置方案
Aug 18 Javascript
vue中导出Excel表格的实现代码
Oct 18 Javascript
微信小程序列表中item左滑删除功能
Nov 07 Javascript
在LayUI图片上传中,解决由跨域问题引起的请求接口错误的方法
Sep 24 Javascript
Vue $emit()不能触发父组件方法的原因及解决
Jul 28 Javascript
JavaScript实现外溢动态爱心的效果的示例代码
Mar 21 Javascript
微信小程序 less文件编译成wxss文件实现办法
Dec 05 #Javascript
微信小程序 获取当前地理位置和经纬度实例代码
Dec 05 #Javascript
Servlet实现文件上传,可多文件上传示例
Dec 05 #Javascript
微信小程序 textarea 详解及简单使用方法
Dec 05 #Javascript
解析Javascript单例模式概念与实例
Dec 05 #Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
Dec 05 #Javascript
深入理解jQuery()方法的构建原理
Dec 05 #Javascript
You might like
php下实现折线图效果的代码
2007/04/28 PHP
php Imagick获取图片RGB颜色值
2014/07/28 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
2010/05/07 Javascript
EasySlider 基于jQuery功能强大简单易用的滑动门插件
2010/06/11 Javascript
Jvascript学习实践案例(开发常用)
2012/06/25 Javascript
jQuery侧边栏随窗口滚动实现方法
2013/03/04 Javascript
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
微信小程序 video组件详解
2016/10/25 Javascript
JS传参及动态修改页面布局
2017/04/13 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
vue2.0学习之axios的封装与vuex介绍
2018/05/28 Javascript
微信小程序自定义底部弹出框
2020/11/16 Javascript
JavaScript 高性能数组去重的方法
2018/09/20 Javascript
VUE搭建手机商城心得和遇到的坑
2019/02/21 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
Python 多线程的实例详解
2017/09/07 Python
对python 命令的-u参数详解
2018/12/03 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
PyTorch基本数据类型(一)
2019/05/22 Python
python3实现从kafka获取数据,并解析为json格式,写入到mysql中
2019/12/23 Python
tensorflow模型继续训练 fineturn实例
2020/01/21 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
财务与信息服务专业推荐信
2013/11/28 职场文书
《莫高窟》教学反思
2014/02/25 职场文书
活动总结结尾怎么写
2014/08/30 职场文书
教师年度个人总结
2015/02/11 职场文书
2016机关干部作风建设心得体会
2016/01/21 职场文书