Hi,
I have a grid with subgrids on page. And I had to make custom delete button which shows delete dialog window (default kendo behaviour - show alert, not acceptable in my app).
But when someone press delete-button in subgrid, it invokes click on delete button in main grid (via injected.js, I understood that in debug proccess in chrome). I dont need that behaviour. How to prevent click on delete button in main grid?
Provide part of code here, and all code of this page in Attachment
Code :
//Main grid@(Html.Kendo().Grid<TerminalViewModel>() .Name("TerminalsGrid") .Columns(c => { c.Bound(x => x.Brand.Name) c.Bound(x => x.TerminalModel.Name) c.Bound(x => x.SerialNumber) c.Bound(x => x.CommissioningDate) c.Bound(x => x.CurrentAZS) c.Command(command => command.Edit() .HtmlAttributes(new { style = "text-align: center;" }) .Width(131); c.Command(command => command.Custom("Delete") .Text("<span class='k-icon k-delete'></span>Удалить") .Click("prepareToDelete")) .HtmlAttributes(new { style = "text-align: center;" }); }) .Events(x => x .Save("onSaveDisableUpdateButton") .DataBound("onDataBoundHideControlButtons")) .DataSource(ds => ds .Ajax() .Events(e => e .Error("onErrorInCatalogs")) .Model(m => { m.Id(x => x.Id); m.Field(x => x.Brand).DefaultValue(new ListItemIntViewModel { Name = "" }); m.Field(x => x.TerminalModel).DefaultValue(new ListItemIntViewModel { Name = "" }); m.Field(x => x.Organization).DefaultValue(new ListItemViewModel { Name = "" }); m.Field(x => x.Contractor).DefaultValue(new ListItemViewModel { Name = "" }); }) .Read(r => r.Action("JsonRead", "Terminals")) .Create(c => c.Action("JsonCreate", "Terminals")) .Update(u => u.Action("JsonUpdate", "Terminals")) ) .Editable(editable => editable.Mode(GridEditMode.PopUp).TemplateName("EditTerminal").Window(x => x.Width(550).Title("Данные терминала"))) .ToolBar(t => t.Create()) .Sortable(s => s.AllowUnsort(true)) .Filterable(ftb => ftb.Mode(GridFilterMode.Row)) .ClientDetailTemplateId("template") .Scrollable(scroll => scroll.Height("auto")) .Pageable() .Events(events => events .DetailExpand("detailExpand") .DetailCollapse("detailCollapse")))// Helper for Delete Window@Html.DeleteModal()
//Subgrid@helper StateChanges(){ @(Html.Kendo().Grid<TerminalStatesChangeHistoryViewModel>() .Name("grid_state_changes_#=Id#") .Columns(columns => { columns.Bound(col => col.TerminalState.Name) .EditorTemplateName("EditTerminalState"); columns.Bound(col => col.StartTime) .EditorTemplateName("DateTimeEditor"); columns.Bound(col => col.EndTime) .EditorTemplateName("DateTimeNullableEditor"); columns.Command(c => c.Edit()) .HtmlAttributes(new { style = "text-align: center;" }); columns.Command(command => command.Custom("Delete") .Text("<span class='k-icon k-delete'></span>Удалить") .Click("prepareToDeleteInSubgrid")) .HtmlAttributes(new { style = "text-align: center;" }); }) .Sortable() .Events(x => x .Save("onSaveDisableUpdateButton") .DataBound("onDataBoundHideControlButtons")) .Editable(editable => editable.Mode(GridEditMode.InLine)) .ToolBar(toolbar => { toolbar.Create(); }) .DataSource(data => data .Ajax() .Sort(sort => sort.Add("StartTime").Descending()) .Events(events => { events.Error("onErrorInSubgrid.bind({ WidgetID: 'grid_state_changes_#=Id#'})"); events.Sync("onSubgridSync.bind({ WidgetID: 'grid_state_changes_#=Id#'})"); }) .Model(model => { model.Id(m => m.Id); model.Field(x => x.TerminalState).DefaultValue(new ListItemIntViewModel()); model.Field(x => x.StartTime).DefaultValue(DateTime.Now); }) .Create(update => update.Action("StateChangesCreate", "Terminals", new { terminalId = "#= Id #" })) .Read(read => read.Action("StateChangesRead", "Terminals", new { terminalId = "#= Id #" })) .Update(update => update.Action("StateChangesUpdate", "Terminals")) ) .Pageable(pager => pager.Refresh(true)) .ToClientTemplate() )}
<script>
function prepareToDeleteInSubgrid(e) {
e.preventDefault();
var gridId = this.element[0].id;
if (gridId.indexOf("state_changes") > 0) {
deleteUrl = deleteStateChangeUrl;
}
else if (gridId.indexOf("fuel_station_changes") > 0) {
deleteUrl = deleteFuelStationChangeUrl;
}
else return;
showDelete(e, this);
}
function prepareToDelete(e) {
var gridId = this.element[0].id;
deleteUrl = deleteTerminalUrl;
showDelete(e, this);
}
function showDelete(e, gridWidget) {
if (gridWidget == undefined) {
gridWidget = this;
}
var target = $('#deleteModal');
var id = gridWidget.dataItem($(e.currentTarget).closest("tr")).id;
gridname = '#' + gridWidget.element[0].id;
target.find('#entryId').val(id);
$('#PopupDeleteExceptionSection').css("display", "none");
target.modal();
}
</script>