2010-08-25 11 views
9

Tôi có một JQGrid với loadonce: true (vì vậy tất cả phía máy khách) và phân trang được kích hoạt (với 20 trang).JQGrid Programatically Chọn Grid Row

Tôi muốn chỉ định một hàng (theo chương trình, không có đầu vào của người dùng) và có lưới điều hướng đến trang tương ứng để chọn hàng được chỉ định.

Điều này có thể thực hiện với JQGrid hiện tại không?

Tôi đã xem xét tìm kiếm và lọc, nhưng chỉ tải lại lưới với các hàng mới - Tôi cần lưới của mình để điều hướng đến đúng trang - Giữ dữ liệu và cấu trúc của nó.

Tôi đang trong quá trình tối ưu hóa cấu trúc lưới của mình, vì vậy mọi thay đổi cần thiết (nói phía máy khách đến phía máy chủ) sẽ có thể thực hiện được.

+0

Tôi có ý tưởng về cách đạt được điều này, nhưng tôi vẫn muốn biết liệu có cách nào được xây dựng không. Ý tưởng của tôi: 1. a = Nhận tổng số phần tử trên mỗi máy nhắn tin. 2. b = Nhận tổng số phần tử trong lưới/ 3. Điều hướng đến trang b 4. chọn phần tử có id được xác định trước. – Bob

+0

Bạn đã thử nghiệm những gì tôi đã đề xuất với lưới cây? Làm việc tất cả mà không có bất kỳ yêu cầu đến máy chủ (trong trường hợp 'loadonce: true')? – Oleg

+0

@Oleg: Hey there! Tôi sẽ triển khai các đề xuất của bạn trong vài ngày tới. Hiện đang sửa lỗi cho bản phát hành của tôi hôm nay. – Bob

Trả lời

17

Vì bạn sử dụng loadonce:true, khi đó bạn chuẩn bị dữ liệu trên máy chủ. Ở phía máy chủ, bạn có thể quyết định chọn hàng nào. Về phía máy chủ, bạn cũng có thể dễ dàng tính toán trên trang nào sẽ là hàng được chọn. Ví dụ: id của hàng đã chọn và trang được chọn bạn có thể bao gồm như một phần của userdata. Vì vậy, các dữ liệu được gửi từ máy chủ có thể trông giống như sau:

{ 
    "total": 5, 
    "page": 1, 
    "records": 107, 
    "rows": [ 
     ... 
    ], 
    "userdata": { 
     "page": 3, 
     "selId": 24 
    } 
} 

Bên trong loadComplete bạn có thể làm về sau

loadComplete: function(data) { 
    if (jQuery("#list").getGridParam('datatype') === "json") { 
     // data.userdata is the same as jQuery("#list").getGridParam('userData'); 
     var userdata = jQuery("#list").getGridParam('userData'); 
     var curPage = jQuery("#list").getGridParam('page'); // is always 1 
     if (curPage !== userdata.page) { 
      setTimeout(function(){ 
       jQuery("#list").setGridParam(
        { page: userdata.page }).trigger("reloadGrid"); 
       jQuery("#list").setSelection (userdata.selId, true); 
      },100); 
     } 
     else { 
      jQuery("#list").setSelection (userdata.selId, true); 
     } 
    } 
} 

Một ví dụ làm việc bạn có thể nhìn thấy trên http://www.ok-soft-gmbh.com/jqGrid/DataToSelect.htmhttp://www.ok-soft-gmbh.com/jqGrid/DataToMultiSelect.htm.

CẬP NHẬT: Free jqGrid hỗ trợ multiPageSelection:true tùy chọn phân tách bằng phiên bản 4.10.0. Tùy chọn cho phép thiết lập lựa chọn nhiều hàng trong lưới rất dễ dàng (và nó hoạt động rất nhanh, bởi vì nó thiết lập trạng thái lựa chọn trực tiếp trong khi tạo cơ thể của lưới). Xem the answerthe demothe readme to 4.10.0.

+0

Cảm ơn bạn như thường lệ Oleg! Phương pháp này có yêu cầu tôi tạo lại lưới trên máy chủ mỗi khi tôi muốn điều hướng đến một trang khác không? Chương trình của tôi có cây và lưới. khi người dùng chọn một phần tử trong cây, lưới sẽ tìm kiếm phần tử đó và chọn nó trong lưới. – Bob

+1

Xin chào! Bởi vì bạn sử dụng 'loadonce: true' chỉ tải đầu tiên sẽ là từ máy chủ. Tôi kiểm tra 'getGridParam ('datatype') ===" json "' trong 'loadComplete' vì jqGrid thay đổi thành' "local" 'và trong lần làm mới tiếp theo (phân trang, phân loại, lọc/tìm kiếm) tất cả các công trình cục bộ không có máy chủ. Với lưới cây tôi không có kinh nghiệm, nhưng bởi vì nó có cùng một jqGrid API tất cả cũng nên làm việc hoặc có thể làm cho ngón chân sửa đổi mã tương ứng dựa trên cùng một ý tưởng. – Oleg

+0

Xin chào Oleg! Tôi đã thực hiện chức năng lựa chọn của tôi dựa trên lời khuyên của bạn và nó hoạt động hoàn hảo! Cảm ơn. Tôi đã thay đổi nó một chút kể từ khi dữ liệu bảng của tôi không bao giờ thay đổi - Khi tải tôi đã lưu trữ một danh sách json của tất cả các hàng của tôi và id tương ứng của chúng.Khi chọn nút cây, tôi tìm số trang của nút và chọn nó trong lưới. – Bob