Как предотвратить открытие редактора сетки кендо, всплывающих в JavaScript

0

У меня две сетки. Когда первая выбрана строка, из другой сетки, пользователь может правильно создать новую строку. Если вначале не выбрана строка, функция в предупреждении javascript, но не может помешать открытию всплывающего окна. Мне нужно, как я могу предотвратить или закрыть закрытие сетки

Две сетки

//grid code in view

                  @(Html.Kendo().Grid<Kurslar.Models.DonemKursu>()
    .Name("donemGrid")
    .Columns(columns =>
    {
        columns.Bound(p => p.DersAdi).Title("Ders").Width(85);
        columns.Bound(p => p.EgitmenAdiSoyadi).Title("Eğitmen").Width(200);
        columns.Bound(p => p.SinifKontenjanSayisi).Title("Kontenjan").Width(80);
        columns.Bound(p => p.DonemBaslangicBitis).Title("Dönem").Width(157);
        columns.Bound(p => p.DonemId).Visible(false);
        columns.Bound(p => p.DersId).Visible(false);
        columns.Bound(p => p.EgitmenId).Visible(false);
        columns.Command(command => { command.Edit().Text("Güncelle"); command.Destroy().Text("Sil"); }).Width(164);

    })
    .Pageable()
    .Sortable()
    .Selectable()
    .HtmlAttributes(new { style = "max-width:700px", id = "donemGrid" })
    .Editable(editable => editable.Mode(GridEditMode.PopUp)
                        .Window(conf => conf.Title("Yeni Kurs"))
                        .TemplateName("DonemKursuTemplate"))
    .ToolBar(toolbar => toolbar.Create().Text("Kurs Ekle"))
    .Events(e => e.Edit("onEdit").Change("change"))
    .DataSource(dataSource => dataSource
        .Ajax()
        .Read("GridDonemKurslari", "Tanim")
        .Create(create => create.Action("DonemKursuOlustur", "Tanim"))
        .Update(update => update.Action("DonemKursuGuncelle", "Tanim"))
        .Destroy(destroy => destroy.Action("DonemKursuSil", "Tanim"))
        .PageSize(20)
        .Model(model => model.Id(p => p.DonemId))


    )
)
            </td>
            <td style="vertical-align:top;max-width:600px">
                <h4>Sınıflar</h4>

                @(Html.Kendo().Grid<Kurslar.Models.DonemKursSinifi>()
    .Name("sinifGrid")
    .Columns(columns =>
    {
        columns.Bound(p => p.Tanim).Width(50).Title("Tanim");
        columns.Bound(p => p.DersAdi).Width(50).Title("Ders");
        columns.Bound(p => p.EgitmenAdiSoyadi).Width(50).Title("Eğitmen");
        columns.Bound(p => p.KontenjanSayisi).Width(50).Title("Kontenjan");
        columns.Bound(p => p.DonemBaslangicBitis).Width(50).Title("Dönem");
        columns.Bound(p => p.TarifeId).Width(50).Title("Tarife");
        columns.Bound(p => p.DonemId).Visible(false);
        columns.Bound(p => p.DersId).Visible(false);
        columns.Bound(p => p.EgitmenId).Visible(false);
        columns.Command(command => { command.Edit().Text("Güncelle"); command.Destroy().Text("Sil"); }).Width(180);

    })
    .Pageable()
    .Sortable()
    .AutoBind(false)
    .Editable(editable => editable.Mode(GridEditMode.PopUp)
                      .Window(conf => conf.Title("Yeni Sınıf"))
                        .TemplateName("DonemKursSinifiTemplate"))
                        .Name("pencere")
    .ToolBar(toolbar => toolbar.Create().Text("Sınıf Ekle"))
    .Events(e => e.Edit("onEditSinif"))
    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("GridDonemKursSinifi", "Tanim").Data("data"))
        .Create(create => create.Action("DonemKursSinifiOlustur", "Tanim").Data("dataCreate"))
        .Update(update => update.Action("DonemKursSinifiGuncelle", "Tanim"))
        .Destroy(destroy => destroy.Action("DonemKursSinifiSil", "Tanim"))
        .PageSize(20)
        .Model(model => model.Id(p => p.Id))
     )
     .Resizable(resize => resize.Columns(true))
)
// some unnecessary code block

Функция onEditSinif в javascript

function onEditSinif(e) {
        var grid = $("#donemGrid").data("kendoGrid");
        var rows = grid.select();

        if (e.model.isNew()) {
            try {
                var kontenjan = grid.dataItem(rows).SinifKontenjanSayisi;
                var dersAdi = grid.dataItem(rows).DersAdi;
                var egitmenAdiSoyadi = grid.dataItem(rows).EgitmenAdiSoyadi;
                var donemBaslangicBitis = grid.dataItem(rows).DonemBaslangicBitis;
                $("#DonemBaslangicBitis").val(donemBaslangicBitis);
                $("#DersAdi").val(dersAdi);
                $("#EgitmenAdiSoyadi").val(egitmenAdiSoyadi);

                var firstItem = $('#sinifGrid').data().kendoGrid.dataSource.data()[0];
                firstItem.set('KontenjanSayisi', kontenjan);

                $("#KontenjanSayisi").val(kontenjan);
            } catch (f) {
                alert("Please select Kurslar first");

                // i need to prevent pop up here ** 
            }

        }
        else {
            $('.trhideclass1').hide();        
        }
    }

Кто-нибудь знает, как это происходит?

благодаря

Теги:
asp.net-mvc
kendo-ui
kendo-grid

3 ответа

2
Лучший ответ

Вы не можете предотвратить редактирование, как это, потому что событие редактирования запускается после того, как окно открыто, а это значит - слишком поздно :).

Вместо этого вы можете создать столбец шаблонов с кнопкой, внутри которой запускается функция JavaScript, и на основе вашего условия вы можете использовать методы Grid addRow/editRow и т.д. Большая часть того, о чем я упоминал, здесь освещена.

  • 0
    Спасибо, я постараюсь, но прежде чем пытаться спросить, есть ли способ закрыть это окно?
  • 1
    Да, вы можете использовать метод cancelRow. Вот документация github.com/telerik/kendo-docs/blob/production/api/web/…
Показать ещё 1 комментарий
1

Вы можете закрыть форму редактирования всплывающих окон, которая уже создана внутренним механизмом редактирования Kendo:

function Grid_OnEdit(e) {
        if (!isCorrectStatus(e.model.StatusID)) {
            var grid = this;
            setTimeout(function () {
                grid.cancelRow();
                alert("Bad status!");
            });
        }   
}

Но форма редактирования всплывающих окон... Не существует хорошего способа предотвратить отображение формы редактирования правильно, только сделайте это "вручную"...

0

Начните редактирование формы "вручную". С проверкой перед редактированием:

function editDoc () {   
    var grid = $("#DocGrid").data("kendoGrid");
    var rows = grid.select();
    var currentDataItem = grid.dataItem(rows);
    var status = currentDataItem.StatusID;
    if (!isDocumentGoodStatus(status)) {
        showWarning("Bad status!", null);
        return;
    }    
    // fire edit event 
    grid.editRow(currentDataItem);    
}

Функция editDoc вызывается из меню или любой кнопки вместо "стандартного пути" с помощью нажатия кнопки редактирования в столбце команды в сетке

Ещё вопросы

Сообщество Overcoder
Наверх
Меню