2017-07-13 3 views
0

Ich habe eine DropDownlist und Kendo Grid. Wenn in Dropdownliste der Wert 1 ausgewählt ist, sollten die Zellen im Raster bearbeitet werden können. Wenn der ausgewählte Wert 2 ist, sollten die Zellen im Raster nicht bearbeitet werden können. Das Folgende ist der Code für Kendo Grid.Aktivieren/Deaktivieren Kendo Grid-Zellen

@(Html.Kendo().Grid(Model.Data.Items) 
    .Name("Grid1") 
    .Columns(columns => 
     { 
     columns.Bound(p => p.first).Title("first").Width(100).HeaderHtmlAttributes(new { style = "text-align:center;font-weight:bold" }).HtmlAttributes(new { style = "text-align: right;" }).Format("{0:N}").ClientTemplate(""); 
     columns.Bound(p => p.second).Title("second").Width(100).HeaderHtmlAttributes(new { style = "text-align:center;font-weight:bold" }).HtmlAttributes(new { style = "text-align: right;" }).Format("{0:N}"); 
     columns.Bound(p => p.third).Title("Third").Width(100).HeaderHtmlAttributes(new { style = "text-align:center;font-weight:bold" }).HtmlAttributes(new { style = "text-align: center;" }); 
     }) 
    .DataSource(dataSource => dataSource 
    .Ajax() 
    .ServerOperation(true) 
    .Model(Model=> { Model.Id(p => p.first); }) 

    ) 
    .Selectable()           
    .Editable(editable => editable.Mode(GridEditMode.InCell).CreateAt(GridInsertRowPosition.Bottom)) 
    .Scrollable(scr => scr.Height(179))) 

Verwende ich die Zelle jederzeit bearbeiten kann, aber ich brauche einen Zustand, in dem die Zellen nicht bearbeitet werden sollen, wenn Dropdownlist ausgewählt Wert ändert. (Hinweis: Grid ist in der .cshtml (Ansicht) Seite, nicht in der js Datei.)

Bitte helfen Sie mir dabei.

+0

Sie müssen jquery verwenden, um eine Änderung zu erkennen und Ihre Rasterzeile entsprechend dieser Auswahl editierbar zu machen. – hasan

Antwort

0

Nicht sicher, ob dies ohne die Verwendung eines Gitters event unmöglich ist, das eine Javascript-Funktion aufruft.

können Sie verwenden das edit Ereignis an eine Funktion verdrahtet, die Sie bedingte Kontrolle der Daten anwenden können:

function onEdit(e) {   
    if(e.model.ShipCountry == "Germany" && e.container.index() == 0) { 
     this.closeCell(); 
    } 
} 

Im obigen Beispiel wird die onEdit Funktion überprüft, ob die Zeile an den derzeit angeklickt Zelle hat eine ShipCountry gleich Deutschland und wenn der Absender des Ereignisses in Spalte 0 ist. Wenn dies der Fall ist, schließt es die Zelle und blockiert damit die Bearbeitung.

Hier ist eine Dojo example zu demonstrieren. Sehen Sie sich die Konsole an, um die Objektattribute zu sehen, die e über das Bearbeitungsereignis und e.model gesendet haben.

Hinweis: Das Beispiel ist rein Javascript, aber Sie können das edit Ereignis an das Netz auf MVC verdrahten mit:

.Events(e => e.Edit("onEdit")) 

Hinweis: Die Funktion (onEdit) in JS-Datei sollte vor $ platziert werden (Dokument) .ready-Funktion, weil das Gitter rendert, bevor document.ready() ausgelöst wird.

+0

Ich habe das versucht, aber ich bekomme "0x800a1391 - JavaScript Laufzeitfehler: 'onEdit' ist undefined" dieser Fehler. – Techno

+0

Entschuldigung dafür, dass in der Antwort nicht angegeben wurde, dass die 'onEdit'-Funktion außerhalb von' document.ready 'sein muss, zeigt das Beispiel die Notwendigkeit dafür. – Sandman