2016-05-10 9 views
0

Ich habe eine MVC Kendo UI Grid alsDeaktivieren bearbeiten auf Telerick MVC Grid

@(Html.Kendo().Grid<SomeViewModel>() 
       .Name("someGrid") 
       .ToolBar(toolbar => 
       { 
        toolbar.Create().Text("Add Entry"); 
        toolbar.Save(); 
       }) 
       .Columns(columns => 
       { 
        columns.Bound(p => p.Name).ClientTemplate(@"<input type='radio' name='SomeradioName'> #= Name # </input>"); 
        columns.Bound(p => p.DateCreated).Format("{0:dddd dd MMMM yyyy}"); 
       }) 
       .Editable(editable => editable.Mode(GridEditMode.InCell)) 
       .Events(e => e.DataBound("onDataBound")) 
       .Events(e => e.Edit("onDataEdit")) 
       .Selectable(selectable => selectable.Enabled(true).Mode(GridSelectionMode.Single).Type(GridSelectionType.Row)) 
       .Scrollable() 
       .Filterable() 
       .HtmlAttributes(new {style = "height:200px;"}) 
       .DataSource(dataSource => dataSource 
        .Ajax() 
        .ServerOperation(false) 
        .Batch(false) 
        .Events(events => events.Error("onError")) 
        .Model(model => 
        { 
         model.Id(s => s.Id); 
         model.Field(s => s.Name).Editable(true); 
         model.Field(s => s.DateCreated).Editable(false); 
        }) 
        .Read(read => read.Action(...)) 
        .Create(create => create.Action(...)) 
        .Update(create => create.Action(...)))) 

folgt ich in der Zelle Bearbeitung für bereits hinzugefügt Einträge deaktivieren möchten.

Also, ein paar Dinge habe ich versucht,

Ansatz # 1:

<script> 
    function onDataEdit(e) { 
     if (!e.model.isNew()) { 
      var grid = this; 
      grid.closeCell();    
     } 
    } 
</script> 

Anscheinend bricht das Optionsfeld Auswahlereignis (.change Ereignis), die in OnDataBound verdrahtet werden. In OnDataEdit Ereignisse do

$("#Name").attr("readonly", true); 

Dies auch in Ordnung ist, aber wieder Ereignis ändern wird nicht gefeuert mehr auf Radio-Button klicken: closeCell Schrauben Sie es auf und Ereignis mehr ändert nicht bekommt

Ansatz # 2 bis gefeuert bis der Befehl Cancel changes geklickt wird.

Ansatz # 3

Es scheint anders zu sein, zu tun, um in diesem Link hier als gegeben zu deaktivieren aktivieren: http://docs.telerik.com/kendo-ui/api/javascript/ui/grid#events-edit

if (!e.model.isNew()) { 
     // Disable the editor of the "id" column when editing data items 
     var numeric = e.container.find("input[name=id]").data("kendoNumericTextBox"); 
     numeric.enable(false); 
    } 

Wie mache ich etwas ähnliches in meinem Fall? data konnte nicht aufgelöst werden.

Andere Möglichkeiten?

aktualisieren

Ansatz # 4

e.container.find("input[name=Name]").each(function() { $(this).attr("disabled", "disabled") }); 
var grid = this; 
grid.cancelChanges(); 

Dieser bricht nicht das Änderungsereignis. Die Erfahrung ist jedoch nicht so toll. Wenn der Benutzer beim Hinzufügen eines neuen Datensatzes eine andere Zeile drückt, werden die Änderungen abgebrochen. Sie müssen neue Datensatz hinzufügen und entweder Hit speichern oder auf eine beliebige Stelle außer Startreihen

+0

Wenn Sie die Bearbeitungsfunktionalität deaktivieren möchten, warum verwenden Sie dann die Bearbeitung in der Zelle? Die Bearbeitung in der Zelle ist nur beim Bearbeiten sinnvoll, nicht beim Hinzufügen. Es unterscheidet sich nicht sehr von der Inline-Bearbeitung beim Hinzufügen. – ataravati

+0

So hat Telerik dieses Durcheinander geschaffen, glaube ich. Im Idealfall müssen Create und Edit zwei separate Operationen sein. Auf diese Weise hätte jeder nur die Create-Funktionalität ohne Edit (oder Update) unterstützen können. Aber das ist nicht der Fall. Wenn ich nur Create-Funktionalität unterstützen möchte, ohne dass Edit hinzugefügt wird, wird ein Fehler ausgegeben. Versuch es. Aus diesem Grund sehen wir Fragen wie diese zum Deaktivieren der Gitterbearbeitung. –

Antwort

0

ich gewählt habe, Ansatz 4, die ich aktualisiert. Wenn jemand bessere Ideen hat, kann er sie teilen.

0

Sie können die Spalten machen readonly auf bearbeiten, Zustieg mit 3

function edit(e) { 
    if (e.model.isNew() == false) { 
    $('[name="Name"]').attr("readonly", true); 
    } 
} 

Auch die Vorlage muß nicht eine id=Name habe ich daher Zweifel unten wird für Sie arbeiten. Anstelle von name Attribut finden, wie oben

$("#Name").attr("readonly", true); 

Refer this link for more information

+0

Ich habe gerade den Chrome-Browser aktiviert und sieht so aus, als würde das Bearbeitungsproblem gelöst (von IE kann man am Anfang noch Text hinzufügen, was ein Fehler ist). Diese Lösung löst das Change-Ereignis jedoch nicht mehr aus. Wenn auf den Befehl zum Abbrechen geklickt wird, beginnt das Änderungsereignis erneut zu arbeiten. Also das ist ein Hack und keine saubere Lösung IMO. –

+0

Nun, in diesem Fall denke ich, dass ein Weg wäre, das Raster nicht editierbar zu machen und einen Knopf außerhalb des Rasters hinzuzufügen, um neue Datensätze hinzuzufügen. Klicken Sie auf ein Popup-Fenster und fügen Sie einen neuen Datensatz zum Senden an die Datenquelle/Datenbank mit Ajax oder etwas und binden Sie das Gitter neu. – TheUknown

+0

Yup, aber weil ihr Gitter bereits mit Validierung, Ajax-Aufruf usw. kam, war es einfacher, es einfach zu benutzen. Ich aktualisierte den Ansatz Nr. 4, mit dem ich vorhabe, es sei denn, jemand hat eine bessere Lösung –