4

请考虑以下情况:

  • 具有 igGridUpdating 功能和 RESTDataSource 的 IgniteUI 16.1 igGrid
  • 用户通过模态对话框创建新记录
  • 使用表单数据发起发布请求
  • 服务器处理创建请求并返回一个对象,填充了正确的 ID
  • 在客户端的成功处理程序中,必须找到网格行中新添加的内容并使用从服务器返回的正确 ID 进行更新。
  • ID 列用作网格的主键,它是隐藏的

添加新行时会发生什么?

我们正在观看 infragistics.lob-16.1.js

_dialogOpening()中,第 68167 行 _originalValues是通过$.extend(this._originalValues, values, this._originalValues)、 wherevalues = _getDefaultValues()或其他词计算的values.id = this._pkVal。并且_pkVal是每次出现新行时递增的计数器。

记住这一点,稍后_endEditDialog()会调用,其中newValues代表用户输入的数据,与输入表单的默认值合并:newValues = this._getNewValuesForRow(colElements)后跟newValues = $.extend({}, prevValues, newValues)和与上面prevValues相同_originalValues

然后调用 an _addRow(),调用它的运行grid.dataSource.addRow()并创建一个事务。

我的意思是更新功能会自动为新行生成 ID 和ID = CurrentRowsCount + 1.

因此,如果网格包含 8 条记录,那么新创建的记录将自动分配 ID = 9。想象一下,如果现有记录之一的 ID = 9,那么 igGridUpdatingupdateRow(rowId, values)将更新现有行和新行。我真的很想调用这个方法,以便用从服务器返回的数据更新行。

怎么才能介入全局,完成新行的更新呢?

4

1 回答 1

4

自动生成的主键仅用于涵盖最基本的场景。如果您的应用程序支持行删除,您应该使用generatePrimaryKeyValue事件更改它们以保持它们的唯一性。

在从服务器接收到永久密钥后使用 updateRow 是可行的方法,但是,请记住从数组中弹出事务,以便在下次调用allTransactions时更新不会转到服务器。saveChanges

于 2017-02-09T12:45:31.393 回答