slickgrid ( nsunleo-slickgrid ) 5 增加子件

猿語發表於2021-03-12

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;
    }
  增加子件效果演示:
  

相關文章