Hi,
I followed your media item "CRUD with JQuery Grid", and I applied it right to my example. It works all fine, but I have some problems when I try to implement CRUD operations also on child columns.
My javascript understands that a new child row has been added, or deleted or edited, but what my controller action receives is an empty transaction log.
Here is my code:
@(Html.Infragistics().Grid(Model).ID("grid1").UpdateUrl(Url.Action("UpdateData")).AutoCommit(false).AutoGenerateColumns(true).PrimaryKey("Id").Columns(col =>{ col.For(x => x.Id); col.For(x => x.Code); col.For(x => x.Description).HeaderText("Descrizione"); col.For(x => x.Type).HeaderText("Tipologia");}).Width("100%").Features(feat =>{ feat.Updating() .StartEditTriggers(GridStartEditTriggers.DblClick) .ColumnSettings(colset => { colset.ColumnSetting().ColumnKey("Id").Required(true); colset.ColumnSetting().ColumnKey("Code").Required(true); colset.ColumnSetting().ColumnKey("Description").Required(true); colset.ColumnSetting().ColumnKey("Type").EditorType(ColumnEditorType.Numeric).EditorOptions("groupSeparator: '', maxDecimals: 0 ").Required(true); });}).AutoGenerateLayouts(false).ColumnLayouts(layouts =>{ layouts.For(l => l.SubProducts) .AutoGenerateColumns(false) .ForeignKey("Id") .PrimaryKey("Id") .Columns(childcol => { childcol.For(c => c.Id); childcol.For(c => c.SubCode).HeaderText("Codice Sub"); childcol.For(c => c.SubDescription).HeaderText("Descrizione"); }) .Features(childfeat=> { childfeat.Updating() .StartEditTriggers(GridStartEditTriggers.DblClick) .ColumnSettings(childcolset => { childcolset.ColumnSetting().ColumnKey("Id").Required(true); childcolset.ColumnSetting().ColumnKey("SubCode").Required(true); childcolset.ColumnSetting().ColumnKey("SubDescription").Required(true); }); });}).DataBind().Render()) <script type="text/javascript"> $("#grid1").live('iggridupdatingrowadded', function () { $("#grid1").igGrid("saveChanges"); }); $("#grid1").live('iggridupdatingeditrowended', function (event, ui) { if (ui.rowAdding == false) { $("#grid1").igGrid("saveChanges"); } }); $("#grid1").live('iggridupdatingrowdeleted', function () { $("#grid1").igGrid("saveChanges"); });</script>
So, if I add, edit or delete a row my controller action receives a JSON transaction where I can find these information. But if I add, edit or delete a child row, what my controller action receives is an empty pramater. Here is my action:
public ActionResult UpdateData(string ig_transactions){ ArrayList transactions = (ArrayList)Procurios.Public.JSON.JsonDecode(ig_transactions); foreach (Hashtable t in transactions) { switch (t["type"].ToString()) { case "newrow": case "row": // Do Something... break; case "deleterow": // Do Something... break; } } JsonResult result = new JsonResult(); Dictionary<string, bool> response = new Dictionary<string, bool>(); response.Add("Success", true); result.Data = response; return result;}
Take care that UI works correctly: I can see added rows, edited rows and deleted rows not only on main columns, but also on child ones. But of corse it is just a graphical way: if I refresh the page only main columns have been correctly updated, while child ones not.
Am I doing something wrong? Probably I have to define other event binders for child columns...or is there the possibility to define a different UpdateUrl for children?
Thanks in advance!
Flavio
Hi Angel,
Ok for the Update Url.
But do you mean there is no function in the code I posted (in that case you can show me what kind of function I have to call, please?) or are you saying there is no function in ig javascript file?
Hi Flavio,
it isn't possible to define separate updateUrls. At the moment, if you call saveChanges on the hierarchical grid object, it won't work because there is no such function yet.
Hope it helps,
Angel
Hi Angel, and thank you very much! Very quickly response!!
Uhm..if I use:
$("#grid1").live('iggridupdatingrowadded', function () { $("#grid1").igHierarchicalGrid("saveChanges"); });
instead of calling:
$("#grid1").live('iggridupdatingrowadded', function () { $("#grid1").igGrid("saveChanges"); });
actions is not called. I can define only one update url, right? Or is there a way to define an Update Url for the first grid and another one for child grid? I don't know if this is the problem..but in the way you indicated I can't call the controller action..
Any idea?
Thanks,
hi Flavio,
this appears to be a bug in the sense that child grids' transaction logs aren't aggregated altogether and appended to the root's transaction log. This will be fixed, but the usage should be slightly different:
1) instead of calling:
$("#grid1").igGrid("saveChanges");
2) you should call:
$("#grid1").igHierarchicalGrid("saveChanges");
the fix should make it in the next service release.