博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jquery easyui datagrid subgrid edit
阅读量:4081 次
发布时间:2019-05-25

本文共 4009 字,大约阅读时间需要 13 分钟。

今天需要用到datagrid的子表格subgrid可编辑,于是研究了下自己记录了一下关键部分,以便后续查看。

首先,是父表格部分:

jQuery('#dg').datagrid({    title: 'Adjust Dossier fields',    //url:'data/subdatagrid.json',    //data: obDatagridData,    fitColumns: true,    height: 500,    striped: true,    view: detailview,    singleSelect: true,    columns: [      [{        field: 'dossierAttributeId',        hidden: true      }, {        field: 'mandatory',        title: 'mandatory',        width: 70,        formatter: function (value, row, index) {          return rn_getCheckboxHTML(value, 'mandatory');        }      }      ]    ],    detailFormatter: function (index, row) {      if (row.dossierAttributeId) {        return '
'; } else { return '
'; } }, onExpandRow: function (index, row) { rn_generate_detail_content(index, row); } // Load data in grid jQuery('#dg').datagrid('loadData', obDatagridData);});
在这段代码中最主要是两个方法,一个detailFormatter,这个是告诉渲染器如何渲染详细视图,此方法中table视图采用了动态的ID用以区分不同的subgrid。另外是onExpandRow,即父表格展开时触发的方法,这里调用了一个方法,下面看看所调用的方法:

function rn_generate_detail_content(parentIndex, parentRow) {  var strType = '',    obData,    obColumns,    strDossierAttributeId;  if (parentRow.dossierAttributeId) {    strDossierAttributeId = parentRow.dossierAttributeId;  } else {    strDossierAttributeId = parseInt(parentIndex)+1;  }    obColumns[0].push({      field: 'minValue',      title: 'min.',      width: 50,      editor: 'numberbox'    });    obColumns[0].push({      field: 'maxValue',      title: 'max.',      width: 50,      editor: 'numberbox'    });    obColumns[0].push({      field: 'defaultValue',      title: 'Default',      width: 120,      editor: 'numberbox'    });  obColumns[0].push({    field: 'action',    title: 'action',    width: 70,    align: 'center',    formatter: function (value, row, index) {      if (row.editing) {        var s = ' ';        var c = '';        return s + c;      } else {        return ' ';      }    }  });  jQuery('#ddv-' + strDossierAttributeId).datagrid({    fitColumns: true,    singleSelect: true,    loadMsg: '',    height: 'auto',    columns: obColumns,    onResize: function () {      jQuery('#dg').datagrid('fixDetailRowHeight', parentIndex);    },    onLoadSuccess: function () {      setTimeout(function () {        jQuery('#dg').datagrid('fixDetailRowHeight', parentIndex);      }, 0);    },    onBeforeEdit: function (index, row) {      row.editing = true;      updateActions('#ddv-' + strDossierAttributeId, index);    },    onAfterEdit: function (index, row) {      row.editing = false;      updateActions('#ddv-' + strDossierAttributeId, index);    },    onCancelEdit: function (index, row) {      row.editing = false;      updateActions('#ddv-' + strDossierAttributeId, index);    }  });  jQuery('#ddv-' + strDossierAttributeId).datagrid('loadData', obData);  jQuery('#dg').datagrid('fixDetailRowHeight', parentIndex);}
这段代码也很简单,就是构造出了应该有的子datagrid,都是很平常的方法,其中跟编辑有关的,主要在action列中的edit按钮,按钮点击触发
editrow方法,接下来看下这个方法内容:

function editrow(strDossierAttributeId, target) {  var rowIndex = getRowIndex(target);  jQuery('#ddv-' + strDossierAttributeId).datagrid('beginEdit', rowIndex);}function getRowIndex(target) {  var tr = jQuery(target).closest('tr.datagrid-row');  return parseInt(tr.attr('datagrid-row-index'));}
这段代码,首先会调用getRowIndex获取是点的第几行的按钮,其中closest为从此节点向上遍历到第一个符合选择器的对象,会遍历到这个td所属的tr,然后获取tr自带属性
datagrid-row-index的值来获取到行号。之后便通过选择器指定对应的行开始beginEdit。

另附取数据方法:

function saverow(strDossierAttributeId, target) {  var rowIndex = getRowIndex(target)  var obInsertedRows_ = jQuery('#ddv-' + strDossierAttributeId).datagrid('getChanges', 'inserted');  var obDeletedRows_ = jQuery('#ddv-' + strDossierAttributeId).datagrid('getChanges', 'deleted');  var obUpdatedRows_ = jQuery('#ddv-' + strDossierAttributeId).datagrid('getChanges', 'updated');  var obAllChangedRows_ = jQuery('#ddv-' + strDossierAttributeId).datagrid('getChanges');  jQuery('#ddv-' + strDossierAttributeId).datagrid('endEdit', rowIndex);}
获取数据后即可进行相应的处理。快12点了,今天就到这了。。。

转载地址:http://ghsni.baihongyu.com/

你可能感兴趣的文章
ROS串口编程学习笔记
查看>>
ROS环境下串口通信
查看>>
ros中使用serial包实现串口通信
查看>>
做机械臂导航时遇到的问题5:如何使用ROS内嵌serial功能包实现串口通信
查看>>
ROS为上位机与STM32为下位机串口通讯(一)
查看>>
github上搜了下有ROS uart方面的
查看>>
STM32和ROS的串口通信(这篇是公众号文章写得比较正规详细)
查看>>
全网最实用的STM32和ROS机器人的串口通信方案
查看>>
我觉得还是把ACfly的传感器的逻辑弄清楚,这样再去二次开发好一些。(折腾半天发现有很关键一部分没有开源,怪不得找不到,这让我很失望)
查看>>
freertos工程似乎都是先创建一个任务,再在这个任务里面创建其他任务,似乎就像任务树
查看>>
无人机的高度自适应
查看>>
别人对ACfly的评价
查看>>
还有你怎么判断ACfly是正常接收到了数据,怎么从ACfly端能看到实时的T265传给ACfly的位置数据。
查看>>
我觉得对双目VIO+无人机,单单靠VIO这边输出很好的位置信息还是不够的,无人机这边还是需要做做滤波,比如防止跳变什么的,保证无人机的稳定。
查看>>
英特尔RealSense激光雷达摄像头L515拆解分析
查看>>
优象光流使用的一些注意事项(转载)(光流数据要融合其他传感器使用比较好)
查看>>
mavlink里面有个关键词 msg
查看>>
mavlink消息帧里最重要的两个东西,一个是msgid;一个是payload
查看>>
【无人机开发】通讯协议MavLink详解
查看>>
B站这个讲mavlink的视频不错(弄懂了很多东西)
查看>>