2013-04-05 2 views
5

Próbuję przeładować jqGrid nowymi wierszami, colNames i colModel. Dane wiersza wydają się ładować dobrze, ale kolumny nie wydają się odświeżone. Próbowałem już używać GridUnload i GridDestroy, ale w końcu całkowicie straciłem instancję DOM jQuery i nie ładowałem już żadnych danych.jqGrid reloadGrid i odśwież nowy colModel i colNames

Instancja siatki jest ważna, ponieważ zostanie przekazana innym obiektom jako parametr. Obiekty te mogą dołączać słuchaczy lub wyzwalać zdarzenia.

używam wersji 4.4.2

Odpowiedz

0

Wygląda na to, że jqGrid usuwa początkowe <table></table> z DOM i zastępuje go lub zapomina o referencji (nie wyglądałem tak mocno).

Musisz więc ponownie wybrać nową tabelę za każdym razem, gdy chcesz utworzyć nową siatkę, np. $('table#my-grid'). Jest to trudne, jeśli chcesz przekazać odniesienie tabeli siatki do innych części aplikacji jako parametr.

Moja praca polega na usunięciu odniesienia do siatki i zastąpieniu zapakowanej siatki div oryginalną tabelą. następnie tworzenie jqGrid w normalny sposób z nowym colModel i colNames.

grid.empty(); 
delete grid[0].grid; 
$('#gbox_my-grid').replaceWith(grid); 
grid.jqGrid(options); 

To nie jest tidiest rozwiązań, ale nie pozwala mi zachować stałe odniesienie do pierwotnego <table>. Nie jestem pewien, jak wpłyną na to inne wtyczki jqGrid.

Edit

okazuje się jQuery DataTables lepiej nadaje się do dostosowywania i przyjęliśmy to zamiast używać jqGrid.

5

reloadGrid reload tylko ciało siatki i nie zmienia nagłówki kolumn, które zostaną utworzone, gdy siatka została stworzona.

Jeśli trzeba zmienić liczbę kolumn lub użyć colNames i colModel na miejscu starej siatki masz lub odtworzyć siatkę. Możesz najpierw użyć metody GridUnload, a następnie utworzyć nową siatkę (w twoim przypadku wywołanie grid.jqGrid(data)). Ważne jest, aby w przypadku buforowania selektora jQuery do siatki w zmiennej, takiej jak grid w kodzie, należy jeszcze raz przypisać grid po wywołaniu GridUnload, więc powinieneś zrobić coś takiego jak grid = $("#grid"); bezpośrednio po wywołaniu GridUnload.

Więcej informacji i przykład kodu można znaleźć pod numerem the answer.

+0

jak wspomniano używając GridUnload() przed użyciem jqGrid() nie działa i kiedy spróbował drugi typ to rzuca 'Błąd typu: d.emptyRows jest null' w jQuery – gawpertron

+0

@gawpertron: Przypuszczam, że go użyć w niewłaściwy sposób. Możesz sprawdzić, czy wersja demonstracyjna z odpowiedzi przywoływanej działa bez żadnych problemów w jqGrid 4.4.2 lub 4.4.4. Przypuszczam, że nie zmieniasz wartości 'grid' po użyciu' GridUnload', tak jak opisałem w mojej odpowiedzi. Jeśli masz problemy, powinieneś * dołączyć swoje pytanie do ** obecnego ** kodu, którego używasz *. – Oleg

+0

@gawpertron: Patrz także [odpowiedź] (http://stackoverflow.com/a/9472895/315935). – Oleg

1

Połączyłem obie odpowiedzi i zmodyfikowałem je, aby działało.

var grid = $('#tableID'); 

if(grid[0].grid == undefined) { 
    grid.jqGrid(options); 
} else { 
    delete grid; 
    $('#tableID').GridUnload('#tableID'); 
    $('#tableID').jqGrid(options); 
}