ソースを参照

getGridEditRows 获取被删除的行
grid._transform 有一个全局转换函数,进行渲染前的加工
combogridmulti 在被重新设值之后,要调用 reload 重新刷新

luoyifan 3 年 前
コミット
1e9df5ce68
3 ファイル変更45 行追加1 行削除
  1. 31 1
      src/controls/grid.js
  2. 4 0
      src/controls/stores.js
  3. 10 0
      src/lib/systemLib.ts

+ 31 - 1
src/controls/grid.js

@@ -194,8 +194,13 @@ export default function () {
             me._setDataReal(value)
         },
 
+        /**
+         * 添加行,并进入编辑状态
+         * @param record 新行的属性集
+         * @param editRowCol 要编辑的列序号
+         */
         appendEditRow(record, editRowCol) {
-            const records = this.add(record)
+            const records = this.getStore().add(record)
             const recNew = records[0]
             this.setSelection(records)
 
@@ -206,8 +211,33 @@ export default function () {
             }
         },
 
+        /**
+         * 移除行
+         * @param record 如果记录传空,就是当前选中的行
+         */
+        removeEditRow(record) {
+            if (!record) {
+                record = this.refs.grid2.selection
+            }
+
+            if (!record) {
+                msg('请选中要删除的行')
+                return
+            }
+
+            this.getStore().remove(record)
+        },
+
+        _transform(data) {
+            // 无论是 grid._setDataReal 还是 stores.gridInvokeBuild 都会走这个函数,设值前都可以改变表格值
+            _.forEach(data, row => {
+                row._origin = _.clone(row)
+            })
+        },
+
         _setDataReal(value) {
             const me = this
+            this._transform(value)
             me.setStore(new Ext.data.Store({
                 fields: getFileds(this),
                 data: value

+ 4 - 0
src/controls/stores.js

@@ -30,6 +30,10 @@ export function gridInvokeBuild(scope, grid, config, dataSource, reloadParams =
                     successProperty: 'success',
                     messageProperty: 'msg',
                     transform: function (data) {
+                        if (typeof grid._transform === 'function') {
+                            // 系统转换函数
+                            grid._transform(data.data)
+                        }
                         if (grid.dataTransform) {
                             if (typeof grid.dataTransform === 'string') {
                                 grid.dataTransform = lookupFn(lookupScope(grid), grid.dataTransform)

+ 10 - 0
src/lib/systemLib.ts

@@ -822,6 +822,11 @@ export class SystemEventFu {
                     _.forOwn(grid.default, (v, k) => {
                         sender[k] = v
                         sender.config[k] = v
+
+                        if(sender.rendered) {
+                            // 已经渲染出来了,重新调用 reload 强制刷新
+                            sender.reload()
+                        }
                     })
                 })
 
@@ -1094,6 +1099,10 @@ export function getGridEditRows(grid) {
     let err = ""
     const records = store.getModifiedRecords()
     const newRecords = store.getNewRecords()
+    const removeRecords = []
+    _.forEach(store.getRemovedRecords(), row => {
+        removeRecords.push(row.data)
+    })
     _.forEach(records, (record) => {
         const colums = grid.columns
         let errFunc = undefined
@@ -1139,6 +1148,7 @@ export function getGridEditRows(grid) {
         rows: rows,
         newRows,
         modifyRows,
+        removeRecords,
         err: err
     }
 }