slickgrid ( nsunleo-slickgrid ) 5 增加子件

  上次把单元格切换的问题解决了,这次要最做的事情就是给slickgrid的treegird增加子件,我们先选中某一条记录,然后通过点击事件,给当前的记录增加一个子。

  在做之前,突然之间发现树的展开和收缩不可用了,于是排查了一下,是比较登记的地方之前修改错误了,判断显示隐藏的条件是通过层级来控制的,修正后的结果如下:

  

var TaskNameFormatter = function (row, cell, value, columnDef, dataContext) {
value = value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
var spacer = "<span style='display:inline-block;height:1px;width:" + (15 * dataContext["indent"]) + "px'></span> ";
var idx = dataView.getIdxById(dataContext.id);
var levelNum = doLevelNum(dataContext["indent"]);
var item = data[idx + 1];
if (item && item.indent >
data[idx].indent) { };

  

  增加子件的逻辑,首先需要定位到选中的记录:

var rows = grid.getSelectedRows();

  然后找到treeGrid的增加子件方法,通过查看API,发现有addItem 和 insertItem 两个,addItem是插入到最尾端,不是想要的,而insertItem是插入到给定记录之前的,也不是想要的,但是可以变通一下,既然是插入到之前,那么将当前的值+1,则相当于插入选择值之后了。

      var nRow = nItem(data.length + 1, row, rowData.getItem(row).indent + 1);
rowData.insertItem(row + 1, nRow);

  树的组成关键的信息是父子,还有显示的层级,父比较容易了,即当前的行记录,而层级为当前层级+1即可,这样就可以动态的增加子件了。

  // add new row command
$("#addRow").bind("click", function (e) {
var rows = grid.getSelectedRows();
addRow(rows[0]);
})
  // new row
function addRow(row) {
var current = 5;
var newRow = { title: "new Title", duration: "1 day" };
var rowData = grid.getData();
var nRow = nItem(data.length + 1, row, rowData.getItem(row).indent + 1);
rowData.insertItem(row + 1, nRow);
//data.push(nRow);
grid.setData(rowData);
grid.render();
grid.scrollRowIntoView(current, false);
}
    function nItem(i, parent, indent) {
var d = {};
d["id"] = "id_" + i;
d["indent"] = indent;
d["parent"] = parent;
d["operator"] = "增加 " + i;
d["f2000"] = "EYA001" + i % 7 + "_" + i;
d["f1000"] = "EYA001" + i % 7;
d["f2136"] = "keep your mind!";
d["qty"] = i % 7;
d["createTime"] = '2021-02-24';
d["mp"] = "M";
d["state"] = i % 2 == 0;
return d;
}
  增加子件效果演示:
  

slickgrid ( nsunleo-slickgrid ) 5 增加子件的更多相关文章

  1. 五种情况下会刷新控件状态(刷新所有子FWinControls的显示)——从DFM读取数据时、新增加子控件时、重新创建当前控件的句柄时、设置父控件时、显示状态被改变时

    五种情况下会刷新控件状态(刷新控件状态才能刷新所有子FWinControls的显示): 在TWinControls.PaintControls中,对所有FWinControls只是重绘了边框,而没有整 ...

  2. 修复jquery.treeview的增加子节点的方法的bug

    1.修复理由 在一个android项目中用到了treeview控件(本来自己通过android的原生api实现了一个http://www.cnblogs.com/Mr-Nobody/p/3527688 ...

  3. ABAP-增强-MRP运行-根据工厂/父件/子件/供应商拆分采购申请

    最近有个业务需要,MRP运行过程中需要根据生产计划订单/子件/供应商对应关系来拆解采购申请. 1.具体实例: a.基础数据 整车物料:NL1G58420151001219 子件:00000000888 ...

  4. WPF 使用附加属性增加控件属性

    使用附加属性增加控件属性,使得这个附加属性在使用的时候没有局限性,可以在任何的控件中使用它来增加所需要的属性,使得控件的属性使用起来非常灵活 一.自定义附加属性 using System; using ...

  5. 微服务探索之路04篇k8s增加子节点,metrics资源监控,ingress-nginx域名配置及https配置

    1 k8s增加子节点 1.1 子节点服务器安装docker,使用脚本自动安装 curl -fsSL https://get.docker.com | bash -s docker --mirror A ...

  6. 通过微信公众号API复制公众号自定义菜单同时增加子菜单方法

    主要的原因是再不破坏公众号以前的菜单的基础上增加自定义菜单,主要步骤如下: 1.通过微信提供的微信公众平台接口调试工具获取公众号的所有自定义菜单 网址:https://mp.weixin.qq.com ...

  7. StackPanel在增加控件的问题

    今天遇到这样一个问题,就是我做了一个自定义控件.然后加到StackPanel中, <StackPanel Height="676" HorizontalAlignment=& ...

  8. android动态增加控件时控制样式的方法

    在学习android的动画时,发现所谓的tween动画只是改变绘制效果并不改变原控件的位置时是颇为失望的,虽然3.0之后已经有了property animation,但是由于要兼容老版本的androi ...

  9. Devexpress gridview cell增加控件

    1.根据上图次序,先添加三类控件类型: 2.根据上图次序设置columnEdit 3.点开ColumnEdit , 设置 check 和 uncheck的 value

随机推荐

  1. 5分钟看懂Code128条形码

    什么是Code128条形码? 相信大家看到这个都不陌生吧 1.前言 条形码种类很多,常见的大概有二十多种码制,其中包括:Code39码(标准39码).Codabar码(库德巴码).Code25码(标准 ...

  2. hdoj 5971

    Wrestling Match Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  3. Object Destructuring Assignment vs Object.assign

    Object Destructuring Assignment vs Object.assign // const params = Object.assign({}, this.$route.par ...

  4. Mac 开机时为什么突然响一下,duang

    Mac 开机时为什么突然响一下,duang duang 一下 https://zh.wikipedia.org/wiki/Duang refs xgqfrms 2012-2020 www.cnblog ...

  5. Roman Numerals All In One

    Roman Numerals All In One 罗马数字 refs https://www.mathsisfun.com/roman-numerals.html https://www.maths ...

  6. MySQL 8.x

    MySQL 8.x SQL & NoSQL $ mysql --version # mysql Ver 8.0.21 for osx10.15 on x86_64 (Homebrew) # M ...

  7. How to implement an accurate countdown timer with js

    How to implement an accurate countdown timer with js 如何用 js 实现一个精确的倒计时器 原理剖析 web worker js custom ti ...

  8. Axios all in one

    Axios all in one https://github.com/axios/axios#example GET const axios = require('axios'); // Make ...

  9. JS实现点击加载更多效果

    适用场景:后端直接把所有的文章都给你调出来了,但是领导又让做点击加载更多效果...(宝宝心里苦啊)   点击加载更多效果:         第一个和第二个参数分别是btn和ul的DOM(必填)     ...

  10. NGK乘势而上打造生态所,建立全方位的区块链生态系统

    当金融理财变成了生活的一部分,购买金融衍生品的眼光成为了影响生活质量重要组成部分.这是一个不缺少黄金的年代,一夜间实现财务自由的故事每天都在上演,但是由于太多人缺少发现黄金的眼睛,只能被财富和机遇拒之 ...