2012-02-02 36 views
7

Tôi có lưới mà tôi đang truy xuất toàn bộ tập dữ liệu, sau đó muốn người dùng có khả năng sắp xếp dữ liệu kết quả. Tôi đang sử dụng các thuộc tính sau, nhưng lưới không sắp xếp. Nó cũng đáng nói đến sau khi người dùng nhấp vào một nút, tôi sẽ thực hiện một cuộc gọi AJAX sau đó tôi sẽ cần phải làm mới từ nguồn, nhưng kể từ khi tôi kéo tất cả các dữ liệu cho khách hàng mỗi lần, tôi không cần phải đi trở lại máy chủ chỉ để sắp xếp.jqGrid Dữ liệu từ xa, Sắp xếp cục bộ

loadonce: true, // to enable sorting on client side 
sortable: true //to enable sorting 

Bất kỳ đề xuất nào được đánh giá cao!

Trả lời

2

Không rõ vấn đề là bạn có thể nhìn thấy, nhưng khi sử dụng nguồn dữ liệu từ xa với sắp xếp và lọc cục bộ, có một vài điều bạn cần phải xem ra cho:

  1. Thậm chí nếu bạn sắp xếp tại địa phương, bạn vẫn cần phải loại điều khiển từ xa quá để các dữ liệu từ xa tải sẽ phù hợp với tình trạng phân loại hiện hành của lưới điện.
  2. Bạn không thể thay đổi giá trị loadonce sau khi lưới được tải, nhưng bạn có thể thay đổi giá trị datatype và buộc tải lại từ máy chủ. Lưới điện vẫn sẽ có bạn ban đầu url mà bạn đã đặt cho các lưới điện nên tất cả các bạn sẽ cần phải chạy là:

    $(this).jqGrid('setGridParam', {datatype:'json'}).trigger('reloadGrid'); 
    
  3. Bạn sẽ mất lựa chọn khi bạn tải lại từ xa và thậm chí khi bạn sắp xếp tại địa phương. Để lưu chúng, bạn cần phải thêm các trình xử lý để lưu vùng chọn, thực hiện tải lại và sau đó thiết lập lại các lựa chọn đó.

Bạn có thể tìm thêm thông tin về chính xác làm thế nào để làm tất cả những điều này ở đây: http://articles.firstclown.us/post/jqgrid-configuration-for-remote-data-loading-with-local-sorting-and-filtering

3

Tôi chỉ nhận thấy một cái gì đó. Bạn có thể sử dụng tham số loadComplete khi xác định lưới.

    loadComplete: function() { 
            // add a function here that waits for a short amount of time, like 100msecs 
            jQuery("#list1").jqGrid('setGridParam', { 
              datatype:'local', 
              sortname:'name', 
              sortorder:'asc', 
              page:1 
            }).trigger("reloadGrid"); 
        } 

Lưu ý rằng tôi sử dụng dữ liệu cục bộ và khi tôi cần làm mới, hãy đặt kiểu dữ liệu trở lại xml.

Quan trọng: bản thân điều này sẽ không hoạt động: bạn cần có một lượng thời gian chờ đợi trước khi kích hoạt tải lạiGrid (thực thi dòng). Nếu không, bạn sẽ không thấy sự khác biệt trong đầu ra.

1

Nhu cầu của tôi là làm mới/tải dữ liệu từ xa, trong khi tất cả các hoạt động khác được thực hiện cục bộ thay thế. Sau đó, đây là cách tôi đạt được nhu cầu của mình.

Chuẩn bị jqGrid với datatype địa phương

$("#jqGridView").jqGrid({ 
    //url: originalUrl,// Original line 
    //datatype: "json",// Original line 
    datatype: "local", // For local sorting 
    sortable: true, // I want local sorting for all columns 
    colNames: [...], 
    colModel: [...], 
    //... 
}); 

Sau đó gọi chức năng này trên (tái) tải/tìm kiếm:

function reloadJqGrid() { 
    var urlForSearch = "xxx"; // modify your search URL (if required) 
    $.get(urlForSearch, function (data) { 
     $("#jqGridView").jqGrid('setGridParam', 
      { 
       datatype: 'local', 
       data: data.Payload //My URL response json is in JSend format, thus storing the array in "data.Payload". You may simply use "data" 
      }) 
      .trigger("reloadGrid"); 
    }); 
} 

Hope trợ giúp này!

Các vấn đề liên quan