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
Hello Graeme, maybe you will be interested on this:
http://ko.infragistics.com/community/forums/p/93201/461687.aspx#461687
Greetings.
OK thanks a lot Graeme! ;)
Hi Luis
Zdravko told me this, though I haven't tested it out since I got my system working as described above:
Issue "169561: Transactions of type "newrow" on child layouts should always include the foreign key in the transaction log" has been addressed in service release versions 2013.1, 2013.2, 2014.1, 2014.2.
The following additional notes have been provided regarding this issue:
This service release is now available under your account at the Infragistics Website. To download the service release, log in to ‘Account’ and select ‘Keys & Downloads’. Select the appropriate tab for this product; then the license key. The available service releases (Hot Fixes) should now be listed on the page.
So, if you make sure you have the latest release of the listed versions you should be OK.
Hi Graeme! Did you solve this issue? I am very interested on this topic too. Thanks.
Hello,I am just checking do you have the chance to check the new available Service Release?