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());
}