2010-09-22 35 views
11

Chúng tôi sử dụng nút tải lại jqGrid navigator trên lưới có loadonce được đặt thành true.Làm cách nào để tải lại jqGrid để truy cập máy chủ?

Nút tải lại hiện KHÔNG quay lại máy chủ để lấy dữ liệu - làm cách nào chúng tôi có thể tải lại để truy cập máy chủ để nhận dữ liệu mới nhất?

Tôi tin rằng chúng ta có thể sử dụng beforeRefresh gọi lại để thiết lập mạng lưới data để json thay vì local nhưng tôi không rõ làm thế nào để thậm chí cấu hình phương thức beforeRefresh - Tôi không thực sự hiểu các tài liệu.

Trả lời

22

Bạn không phải là người duy nhất gặp sự cố. Tôi trả lời trước số the same question. Để tải lại nội dung lưới từ máy chủ, bạn nên đặt lại thông số datatype thành giá trị ban đầu "json" hoặc "xml" và sau đó làm mới lưới. Ví dụ

jQuery("#list").jqGrid('setGridParam',{datatype:'json'}).trigger('reloadGrid'); 

CẬP NHẬT: Để gọi dòng bên trong beforeRefresh xử lý sự kiện bạn có thể làm sau

jQuery("#list").jqGrid('navGrid','#pager', 
    { edit:false,view:false,add:false,del:false,search:false, 
    beforeRefresh: function(){ 
     alert('In beforeRefresh'); 
     grid.jqGrid('setGridParam',{datatype:'json'}).trigger('reloadGrid'); 
    } 
    }); 

tôi sửa đổi một ví dụ từ am câu hỏi cũ. Here nếu bạn nhấp vào nút làm mới, bạn có thể xem trực tiếp cách mã hoạt động.

CẬP NHẬT 2: Free jqGrid hỗ trợ một số tùy chọn mới. reloadGrid sự kiện hỗ trợ tham số fromServer: true có thể được sử dụng để buộc tải lại dữ liệu từ máy chủ và navGrid hỗ trợ tùy chọn reloadGridOptions có thể được sử dụng để chỉ định tùy chọn reloadGrid được sử dụng khi nhấp vào nút Làm mới. Vì vậy, các mã trên có thể là

$("#list").jqGrid("navGrid", { 
    edit: false, 
    add: false, 
    del: false, 
    search: false, 
    reloadGridOptions: { fromServer: true } 
}); 

Bằng cách người ta có thể sử dụng tùy chọn navOptions jqGrid để xác định tùy chọn mặc định của navGrid (xem bài viết wiki). Nó cho phép viết mã giống như

$("#link").jqGrid({ 
    // all typical jqGrid parameters 
    datatype: "json", // or "xml" 
    loadonce: true, 
    pager: true, // no empty div for page is required 
    navOptions: { 
     edit: false, 
     add: false, 
     del: false, 
     search: false, 
     reloadGridOptions: { fromServer: true } 
    } 
}).jqGrid("navGrid"); 
+0

Cảm ơn - Bạn có thể chạy mã này khi nhấn nút tải lại như thế nào? Tôi không rõ làm thế nào để cấu hình thanh nav để thực hiện phương thức 'beforeRefresh' nếu đây là những gì bạn đang ám chỉ. –

+0

@Marcus: Nếu rất dễ. Tôi bao gồm mã tương ứng trong câu trả lời của tôi. – Oleg

+0

@Oleg, tôi đã thử làm điều này, nhưng một khi tôi nhấp vào nút làm mới, phân trang không hoạt động. –

2

Tôi đã thử cấu hình sau và nó hoạt động.

<script type="text/javascript"> 
jQuery(function() { 
    jq("#YOUR-GRID-ID").jqGrid({ 
     ... 
     loadonce: true, 
     ... 
    }); 
    jQuery("#refresh_YOUR-GRID-ID").click(function(){ 
     jQuery("#YOUR-GRID-ID").setGridParam({datatype: 'json'}); 
     jQuery("#YOUR-GRID-ID").trigger("reloadGrid"); 
    }); 
}); 
</script>