Hi,
I have a grid working nicely with fairly simple rows and inLine editing enabled. Everything is working fine except for a couple of small issues. Here they are:
I have a grid working nicely with fairly simple rows and inLine editing enabled. Everything is working fine except for a couple of small issues. Here they are:
- I insert a row in the grid and fill it in. Click save. Row is committed as expected.
- Without a refresh, I then click the edit button for the same row and attempt to make a change. Save is clicked again.
- The row acts as if it's still in "Create" mode and the data is sent to the the Create controller action. As expected, that fails due to a primary key error of trying to insert the same row again.
- I think this is incorrect. It should be sent to the Update/Edit action.
- Please advise...
Here is the grid code:
My other issue is that I cannot get the aggregations to refresh upon editing or inserting a row. I know that this happens when the datasource is refreshed and I've searched around for some more info. I tried this as the save event handler for the grid. No luck. BTW, the same behavior with or without the e.model.set line.
I'd appreciate any help.
@(Html.Kendo().Grid(Model.TimesheetDetails) .Name("TimesheetDetailGrid") .TableHtmlAttributes(new { style = "padding:0; margin:0;font-size:smaller;color:green" }) .Columns(columns => { columns.Bound(x => x.Id).Hidden(); columns.Bound(x => x.TimesheetId).Hidden(); columns.Bound(x => x.CompanyId).Hidden(); columns.ForeignKey(p => p.JobCodeId, (System.Collections.IEnumerable)ViewData["JobCodes"], "Id", "JobCodeName") .Title("Job Code") .Width(150) .HeaderHtmlAttributes(new { @class = "GridHeader" }); columns.Bound(x => x.Description) .Width(250) .Title("Description") .HeaderHtmlAttributes(new { @class = "GridHeader" }); columns.Bound(x => x.WorkDate) .Width(65) .Title("Date") .HeaderHtmlAttributes(new { @class = "GridHeader" }); columns.Bound(x => x.StartTime) .Width(55) .Title("Start") .Format("{0:hh:mm}") .HeaderHtmlAttributes(new { @class = "GridHeader" }) .HtmlAttributes(new { @class = "StartTime" }); columns.Bound(x => x.EndTime) .Width(55) .Title("End") .Format("{0:hh:mm}") .HeaderHtmlAttributes(new { @class = "GridHeader" }) .HtmlAttributes(new { @class = "EndTime" }) .ClientFooterTemplate("Hours: "); columns.Bound(x => x.Duration) .Width(55) .Title("Hours") .HeaderHtmlAttributes(new { @class = "GridHeader" }) .ClientFooterTemplate("#=kendo.toString(sum, '0.00') #"); columns.Command(command => { command.Edit(); command.Destroy(); }).Width(122); }) .ToolBar(toolbar => toolbar.Create()) .Editable(editable => editable.Mode(GridEditMode.InLine)) .Pageable(x => x .PageSizes(true) .PageSizes(new int[] { 2, 3, 4, 5, 10, 25, 100 })) .Sortable() .Events(events => events.Edit("onEdit")) .Events(events => events.Save("onSave")) //.Events(events => events.DataBound("gridDataBound")) .DataSource(ds => ds .Ajax() .ServerOperation(true) .PageSize(10) .Model(m => { m.Id(vm => vm.Id); m.Field(vm => vm.Id).DefaultValue(Guid.NewGuid()).Editable(false); m.Field(vm => vm.TimesheetId).DefaultValue(Model.Id).Editable(false); m.Field(vm => vm.CompanyId).DefaultValue(Model.CompanyId).Editable(false); m.Field(vm => vm.JobCodeId).DefaultValue(Guid.Empty); m.Field(vm => vm.Duration); }) .Aggregates(aggregates => { aggregates.Add(p => p.Duration).Sum(); }) .Read(read => read.Action("TimesheetDetail_Json", "Timesheet", new { Id = Model.Id })) .Create(update => update.Action("AddDetailRow_Json", "Timesheet")) .Update(update => update.Action("EditDetailRow_Json", "Timesheet")) .Destroy(update => update.Action("DeleteDetailRow_Json", "Timesheet")) ))My other issue is that I cannot get the aggregations to refresh upon editing or inserting a row. I know that this happens when the datasource is refreshed and I've searched around for some more info. I tried this as the save event handler for the grid. No luck. BTW, the same behavior with or without the e.model.set line.
function onSave(e) { var dataSource = this.dataSource; e.model.one("change", function () { dataSource.one("change", function () { //alert(dataSource.aggregates().Amount.sum); }); dataSource.fetch(); }); e.model.set("Duration", $("#Duration").val());}