Ok! Well..
My view is:
(....)
items.Add(Html.X().GridPanelFor(Model)
.ItemID("gridPanel")
.Title("Templs")
.Width(700)
.Height(500)
.Listeners(list =>
{
list.SelectionChange.Handler = "if (this.up('window').down('component[itemId=gridPanel]').selModel.hasSelection()) {" +
"this.up('window').down('component[itemId=btnDelete]').enable();}" +
"else{this.up('window').down('component[itemId=btnDelete]').disable();}";
})
.Plugins(plugins =>
{
plugins.Add(Html.X().CellEditing()
.ClicksToEdit(1)
);
})
.SelectionModel(selectionModel => selectionModel.Add(Html.X().RowSelectionModel()
.Mode(SelectionMode.Multi)
))
.Editor(editors =>
{
editors.Add(Html.X().TextField()
);
})
.Buttons(buttons =>
{
buttons.Add(Html.X().Button()
.ItemID("btnAdd")
.Text("Insert")
.Icon(Icon.Add)
.Listeners(listeners =>
{
listeners.Click.Handler = "this.up('window').down('component[itemId=gridPanel]').store.insert(0, {});" +
"this.up('window').down('component[itemId=gridPanel]').editingPlugin.startEditByPosition({row:0, column:0});";
}));
buttons.Add(Html.X().Button()
.ItemID("btnDelete")
.Text("Delete")
.Icon(Icon.Delete)
.Listeners(listeners =>
{
listeners.Click.Handler = "this.up('window').down('component[itemId=gridPanel]').deleteSelected();" +
"if (!this.up('window').down('component[itemId=gridPanel]').hasSelection()) " +
"{this.up('window').down('component[itemId=btnDelete]').disable();}";
}));
buttons.Add(Html.X().Button()
.ItemID("btnClear")
.Text("Clear")
.Icon(Icon.Cancel)
.Listeners(listeners =>
{
listeners.Click.Handler = "this.up('window').down('component[itemId=gridPanel]').getSelectionModel().deselectAll();" +
"if (!this.up('window').down('component[itemId=gridPanel]').hasSelection()) " +
"{this.up('window').down('component[itemId=btnDelete]').disable();}";
}));
buttons.Add(Html.X().Button()
.ItemID("btnRefresh")
.Text("Refresh")
.Icon(Icon.ArrowRefresh)
.Listeners(listeners =>
{
listeners.Click.Handler = "this.up('window').down('component[itemId=gridPanel]').store.load();";
}));
buttons.Add(Html.X().Button()
.ItemID("btnSync")
.Text("Sync")
.Icon(Icon.Disk)
.DirectEvents(de =>
{
de.Click.Url = Url.Action("HandleChanges");
de.Click.ExtraParams.Add(new Parameter
{
Name = "data",
Value = "this.up('window').down('component[itemId=gridPanel]').store.getChangedData({skipIdForNewRecords : false})",
Mode = ParameterMode.Raw,
Encode = true
});
}));
})
);
And my controller:
public ActionResult HandleChanges(StoreDataHandler handler)
{
ChangeRecords<Templ> persons = handler.BatchObjectData<Templ>();
//var store = this.GetCmp<Store>("Store1");
Templ templ = new Templ();
ProvaContext db = new ProvaContext();
var set = db.Set<Templ>();
foreach (Templ created in persons.Created)
{
set.Add(created);
//var record = store.GetByInternalId(created.TemplID);
//record.CreateVariable = true;
//record.SetId(created.Id);
//record.Commit();
//created.PhantomId = null;
}
foreach (Templ deleted in persons.Deleted)
{
set.Attach(deleted);
set.Remove(deleted);
//Templ.DeletePerson(deleted.Id.Value);
//store.CommitRemoving(deleted.Id.Value);
}
foreach (Templ updated in persons.Updated)
{
set.Attach(updated);
db.Entry<Templ>(updated).State = EntityState.Modified;
//Templ.UpdatePerson(updated);
//var record = store.GetById(updated.Id.Value);
//record.Commit();
}
db.SaveChanges();
return this.Direct();
}
Finally, my model, quite standard:
[Model(Name = "Person", ClientIdProperty = "PhantomId")]
[JsonWriter(Encode = true, Root = "data")]
public class Templ
{
[ModelField(IDProperty=true)]
[Column(Hidden=true)]
public int TemplID { get; set; }
public string Codice { get; set; }
public string Desc { get; set; }
public decimal Quant { get; set; }
public decimal Numer { get; set; }
}
So, I know that the lines commented out in the controller are necessary to have the store up to date with db changes.
But, I'm going step by step. If I run this sample, and i breakpoint after the line
ChangeRecords<Templ> persons = handler.BatchObjectData<Templ>();
, and I watch at the value of "persons", it containes only deleted items, and not created and updated items. So, there are not items which go in created and updated "foreach cicles".
It lets me think that there is something wrong in the view which doesn't pass thorugh "data", cerated and updated items...
Thanks again!