Hi
Ignite UI 13.2 - MVC 5
I have a hierarchical grid populated with parent/child data. I am using teh AddRow feature to add new rows to the grid.
The grid is on a page with other fields on it and I am serialising all of the data so that I can update all fields and the grid in one transaction.
In order to serialise the grid data I call the allTransactions method but it is not returning the child band data. I get the parent band data just fine but can't figure out how to get hold of the changes in the child band (at this point all of the changes are new rows (since I can't save them in order to update them later).
Here is my jQuery code, which is sitting behind a button click on the web page:
var url = "@Url.Action(BRASHjms.Controllers.JobController.ACTION_SaveJob, new {})";var oMaterialTransactions = JSON.stringify($("#MaterialGrid").igGrid("allTransactions"));var form = $('form').serialize(); // Serialize form data.var data = { __RequestVerificationToken: $('[name=__RequestVerificationToken]').val(), ig_MaterialTransactions : oMaterialTransactions, formData: form }; // Format it for our model.// Post to the server.$.post(url, data, saveResponse);
oMaterialTransactions only ever includes the top level, parent, data.
I tried .igHierarchicalGrid("allTransactions") but that throws an error because allTransactions is not a function of igHierarchicalGrid.
How do I get hold of the changes to the child band?
Regards,
Graeme Hart
Hello Graeme,
Thank you for contacting us!
About your question, the Hierarchical gridis composed of multiple igGrids for each level of hierarchy. So if you want to get the transactions for a specific child grid you will need to get that child grid instance and get its transactions. You can get all child grid elements for the hierarchical grid using the allChildren method:
//get all childs (igGrid's)var childrens = $("#grid1").igHierarchicalGrid("allChildren");
This will return a list with all the child grids. Once you get a specific child you can get its transactions via the allTransactions of that child grid. For example:
var allTransactions = [];
for (var i = 0; i < childrens.length; i++) { var trans = $(childrens[0]).data("igGrid").transactionsAsString(); allTransactions.push(trans);}
My suggestion is to use hidden field which will pass the transactions to some begin form.
Code snippet from the controller:
I have created a sample for you in order to show you my approach
Thanks for the reply and example.
I am struggling to get this to work on my system, however.
I can see what you are doing and I get that bit but my equivalent of your allTransactions array only contains my equivalent of changed items - no product information at all so I can't relate the changes back to the parent.
I have Material & Stone where you have Product and Item. My grid has the AddRow feature enabled so I can go in and add a new stone row (ie a child) click the save button and all I get is information about the stone. I don't even get the parent'id, even though it is a column in the stone grid. I can't determine which Material the new Stone row belongs to.
I have modified your example to set EnableAddRow to true rather than false and I see the same result - the item information comes through but it has no product row id in it so I can't determine which product to add the item to.
Can you think of a way to relate the new item rows back to the product?
Graeme