2011-01-17 14 views
8

Mam pewne problemy, aby niektóre komórki (z cellEdit: true) nie były edytowalne, mimo że kolumna jest ustawiona na edytowalną.JQGrid: Dynamicznie ustawiam komórkę na nieedytowalną na podstawie zawartości

Próbowałem na wiele sposobów, takich jak BeforeEditCell, Formater, itp. Żadne wydają się działać.

Najbliższy, jaki mam, to ustawienie formatyzatora w kolumnie, którą chciałbym edytować, a następnie użycie setCell do ustawienia klasy "nie edytowalnej komórki" (fragment poniżej). Za pierwszym kliknięciem komórki niestety przechodzi ona w tryb edycji, ale jeśli klikniesz w innym miejscu i spróbujesz ponownie edytować komórkę, to z powodzeniem nie będzie można jej edytować.

Próbowałem również używać tego samego snipped ale wewnątrz przedEditCell, to skutecznie zatrzymuje komórkę od edycji, ale z kolei "zawiesza" siatkę. Nie możesz już wybrać żadnej innej komórki.

function noEditFormatter(cellValue, options, rowObject) { 
    if (cellValue == 'test') 
     jQuery("#grid").jqGrid('setCell', options.rowId, 'ColName', '', 'not-editable-cell'); 
    return cellValue; 
} 

Każda pomoc będzie mile widziana.

Odpowiedz

12

Pomysł, aby użyć metody setCell, aby dodać komórki "nie edytowalna komórka" do komórek, które nie powinny być edytowalne, jest poprawny. Wybierasz tylko złe miejsce, aby to zrobić. Wewnątrz niestandardowego formatera, siatka może jeszcze nie zostać zbudowana do końca. Polecam użyć loadComplete lub gridComplete do sprawdzenia zawartości siatki z bieżącej strony i zaznaczenia niektórych komórek jako nie do edycji.

Przygotowałem an example, który to demonstruje. Podobnie jak w twoim przykładzie, wszystkie komórki z tekstem "testowym" są oznaczone jako nieedytowalne. W ten sposób można zbadać jedną komórkę i oznaczyć inne komórki jako nieedytowalne.

+0

Dzięki temu rozwiązaniu działa to doskonale. – Shawn

+0

@Shawn: Witamy! – Oleg

+0

@Oleg: Chcę kompletny jqgrid podczas ładowania się z kilku komórek w trybie edycji w każdym wierszu. Czy to jest możliwe. Nie mogę znaleźć niczego przez wyszukiwanie. Proszę o pomoc –

3
var cellattr = function(rowId, tv, rawObject, cm, rdata) { 
if(rawObject.locked) return ' class="not-editable-cell"'; 

};

W colModel: każdy opcje kolumn dodać

{name: 'name',index: 'name', editable: true, width: 100, sortable: false, align: 'center', cellattr: cellattr} 
1

musiałem rozwiązać to teraz (2015) i stwierdził an approach that looks clean: określ funkcję cellbeginedit zwracającej false jeśli komórka nie może być edytowany. Zaczerpnięto z połączonego artykułu i zmieniono:

var checkIfRowIsValid = function (rowIndex) { 
    //somehow get cellValue 
    ... 
    if (cellValue == 'test') return false; 
} 
// initialize jqxGrid 
$("#jqxgrid").jqxGrid(
{ 
    source: dataAdapter, 
    editable: true, 
    selectionmode: 'singlecell', 
    columns: [ 
     { text: 'First Name', columntype: 'textbox', datafield: 'firstname', 
     width: 90, cellbeginedit: checkIfRowIsValid}, 
     { text: 'Last Name', datafield: 'lastname', columntype: 'textbox', 
     width: 90, cellbeginedit: checkIfRowIsValid} 
    ] 
}); 
+2

Ten przykład używa jqxGrid. OP używa jqGrid. – svattom

Powiązane problemy