I've successfully used the igGrid to hook into our Web API. Create, Remove and Delete operations are firing nicely and playing nicely together. The only scenario that is currently failing is this:
In the "iggridupdatingrowadded" event I call "SaveChanges" to the grid to force the API call.
rowAdded: function (e, ui) { var original = ui; ui.owner.grid.saveChanges(function (record, status, response) { var row = this.findRecordByKey(original.rowID); row[original.owner.grid.options.primaryKey] = record[original.owner.grid.options.primaryKey]; this.updateRow(original.rowID, row); }); }
When the transaction commits, it is failing to map the transaction with an -1 ID when it should be 100.
Technical Details:
v14.2
Method: _commitTransaction
this.origDs has a record value of -1.
Unhandled exception at line 244, column 17855 in http://localhost:51580/admin/Scripts/IG/js/infragistics.core.js
0x800a138f - JavaScript runtime error: Unable to set property 'Id' of undefined or null reference
How can I correctly programmatically change the primary key value so the entire grid will function as normal?
Thanks,
Hello,
Thank you for posting in our community.
What I can suggest in order to have a matching ids on the client and server is to bind igGrid to the new(updated) data on every success callback of the saveChanges function. This could be achieved by updating the igGrid data source instance with the values from the underlying data base. The new data could be sent in the response and afterwards used to data bind igGrid. For example:
//add the updated data with the new id`s matching actual records in the response and send it back to the success callback $(".selector").igGrid("saveChanges", function (data) { //Set $(".selector").igGrid("option", "dataSource", data); $(".selector").igGrid("dataBind"); }
//add the updated data with the new id`s matching actual records in the response and send it back to the success callback
$(
".selector"
).igGrid(
"saveChanges"
,
function
(data) {
//Set
"option"
"dataSource"
, data);
}
I hope you find this suggestion helpful.
Please let me know if you have any additional questions regarding this matter.
The data from the saveChanges event is that of a single record. Not the entire datasource. So if I use the code you provided then the grid will go from 100 records, to one record.
Would just calling dataBind cause the grid to reach out to the original url from before and just grab all of the current records?