2013-04-05 19 views
5

Tôi đang cố gắng tải lại một jqGrid với các hàng mới, colNames và colModel. Dữ liệu hàng dường như tải tốt nhưng các cột dường như không được làm mới. Tôi đã thử sử dụng GridUnload và GridDestroy nhưng cuối cùng tôi đã mất hoàn toàn đối tượng jQuery DOM và không còn tải bất kỳ dữ liệu nào nữa.jqGrid reloadGrid và làm mới colModel mới và colNames

var grid = $('#my-grid'); 

if(grid[0].grid == undefined) { 
    grid.jqGrid(options); 
} else { 
    grid.setGridParam(options); 
    grid.trigger('reloadGrid'); 
} 

Ví dụ lưới là quan trọng vì nó sẽ được chuyển đến các đối tượng khác làm thông số. Các đối tượng này có thể đính kèm các trình nghe hoặc kích hoạt các sự kiện.

Tôi đang sử dụng phiên bản 4.4.2

Trả lời

0

Có vẻ như jqGrid loại bỏ <table></table> ban đầu khỏi DOM và thay thế hoặc quên tham chiếu (Tôi chưa thấy khó khăn về nó).

Vì vậy, bạn phải chọn lại bảng mới mọi lúc bạn muốn tạo một lưới mới tức là. $('table#my-grid'). Điều này làm cho nó khó khăn nếu bạn muốn chuyển một tham chiếu của bảng của lưới về các phần khác của ứng dụng của bạn như một tham số.

Công việc của tôi xung quanh liên quan đến việc xóa tham chiếu lưới và thay thế div được bao bọc của lưới bằng bảng gốc. sau đó tạo một jqGrid theo cách thông thường với colModel và colNames mới.

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

Nó không phải là giải pháp tidiest nhất nhưng nó cho phép tôi giữ tham chiếu cố định với <table> ban đầu. Tôi không chắc chắn làm thế nào các plugin jqGrid khác sẽ bị ảnh hưởng bởi điều này mặc dù.

Sửa

nó quay ra jQuery DataTables là phù hợp hơn cho tùy biến và chúng tôi đã áp dụng này thay vì sử dụng jqGrid.

5

reloadGrid tải lại chỉ cơ thể của lưới điện và không làm thay đổi tiêu đề cột sẽ được tạo ra khi lưới điện được tạo ra.

Nếu bạn cần thay đổi số cột hoặc sử dụng colNamescolModel thay cho lưới cũ bạn có hoặc tạo lại lưới. Bạn có thể sử dụng phương pháp GridUnload trước và sau đó tạo lưới mới (gọi grid.jqGrid(data) trong trường hợp của bạn). Điều quan trọng là nếu bạn đã lưu bộ chọn jQuery vào lưới trong một biến như grid trong mã của mình, bạn phải gán grid một lần nữa sau khi gọi GridUnload, vì vậy bạn nên thực hiện một số điều như grid = $("#grid"); ngay sau cuộc gọi GridUnload.

Xem the answer để biết thêm chi tiết và ví dụ về mã.

+0

như đã đề cập sử dụng GridUnload() trước khi sử dụng jqGrid() không làm việc và khi đã thử một loại thứ hai nó ném 'Lỗi Loại: d.emptyRows là null' trong jquery – gawpertron

+0

@gawpertron: Tôi giả sử rằng bạn sử dụng nó một cách sai lầm. Bạn có thể xác minh rằng bản demo từ câu trả lời được tham chiếu làm việc mà không có bất kỳ vấn đề nào trong jqGrid 4.4.2 hoặc 4.4.4. Tôi giả sử rằng bạn không gán lại giá trị của 'grid' sau khi sử dụng' GridUnload' như tôi đã mô tả trong câu trả lời của mình. Nếu bạn có vấn đề, bạn nên * gắn thêm câu hỏi của bạn với mã ** hiện tại ** mà bạn sử dụng *. – Oleg

+0

@gawpertron: Xem [câu trả lời] (http://stackoverflow.com/a/9472895/315935). – Oleg

1

Tôi đã kết hợp cả hai câu trả lời và thực hiện một số sửa đổi để có nó hoạt động.

var grid = $('#tableID'); 

if(grid[0].grid == undefined) { 
    grid.jqGrid(options); 
} else { 
    delete grid; 
    $('#tableID').GridUnload('#tableID'); 
    $('#tableID').jqGrid(options); 
} 
Các vấn đề liên quan