2011-01-26 35 views
6

tôi sử dụng jqGrid với succes lớn theo cách sau:Hoàn thiện chỉnh sửa trong jqGrid

  1. Dữ liệu được nạp từ máy chủ như JSON
  2. Người dùng làm biên tập inline
  3. Khi một nút lưu được nhấp vào tất cả dữ liệu được tuần tự hóa bằng cách sử dụng:

    var data = $ ("# mygrid"). getRowData();

    var datajson = JSON.stringify (data);

Vấn đề với aproach này là tôi sẽ lấy các phần tử đầu vào trong dữ liệu json nếu người dùng không nhấn trở lại hoặc di chuyển ra khỏi ô đã chỉnh sửa. Có cách nào để kết thúc chế độ chỉnh sửa i jqgrid?

Trả lời

5

Bạn có thể sử dụng saveRow để lưu dữ liệu.

Để sử dụng saveRow bạn phải biết id hàng của hàng có thể chỉnh sửa hiện tại. Ví dụ, bạn có thể lưu rowid của chỉnh sửa hiện tại trong một biến (trước khi bạn gọi editRow) và sử dụng giá trị để gọi phương thức saveRow.

CẬP NHẬT: xem the demo. Trước tiên, hãy chọn một số hàng, sửa đổi các giá trị và sau đó nhấp vào nút "Lưu hàng chỉnh sửa hiện tại". Bạn sẽ thấy rằng các thay đổi sẽ được lưu.

+0

Xin lỗi, điều đó không làm điều đó. saveRow gọi phương thức để lưu hàng, nhưng ô vẫn ở chế độ chỉnh sửa. – Bebben

+1

@Bebben: Bạn đã thực hiện một số lỗi trong quá trình triển khai của mình. Tôi đã thêm bản demo thể hiện rằng việc sử dụng tác phẩm 'saveRow'. Nếu bạn cần lưu dữ liệu trên máy chủ thay vì lưu cục bộ, bạn nên sử dụng các tham số khác của 'saveRow': đọc chính xác liên kết của' saveRow' mà tôi đã đăng bạn. – Oleg

+0

Cảm ơn bạn Oleg! Làm việc giống như một nét duyên dáng bây giờ! Tôi nghĩ rằng vấn đề là tôi đã có lưới của tôi trong celledit, và trước khi tôi có thể gọi saveRow tôi phải gọi cellEdit. Bây giờ tôi bắt đầu bằng cách thiết lập tất cả các hàng trong chế độ chỉnh sửa và trước khi gửi, hãy gọi saveRow trên tất cả các hàng. Cảm ơn! – Bebben

0

tôi đã giải quyết nó bằng cách kích hoạt "KeyDown" ENTER sự kiện trên yếu tố:

editoptions: { 
        dataInit: function(elem) { 
         $(elem).datetimepicker({ 
          dateFormat: "yy-mm-dd", 
          onClose: function(datetimeText, datepickerInstance) { 
           $(elem).trigger($.Event("keydown", { keyCode: $.ui.keyCode.ENTER })) 
          } 
         }); 
        } 
       } 
0

tôi sử dụng từ xa nộp cho mỗi tế bào, và như tôi đã sử dụng "contenteditable" div cho biên tập viên di động (đối với văn bản nhiều đường) tôi muốn kết thúc chỉnh sửa ô bằng ctrl-enter.

(Dựa trên câu trả lời và How to close cell-editor? Oleg và http://www.trirand.com/jqgridwiki/doku.php?id=wiki:cell_editing)

$(document).ready(function() { 
    var grid,currentCell; 
    $(".jqGrid_wrapper").on("keydown","div[contenteditable]",function (e) { 
     if (e.ctrlKey && e.keyCode == 13) 
     { 
      grid.jqGrid("saveCell",currentCell.iRow,currentCell.iCol); 
      return false; 
     } 

     return true; 
    }); 
    grid=$("#table_list_2"); 
    grid.jqGrid({ 
     url: ... 
     cellEdit: true, 
     cellsubmit: 'remote', 
     cellurl: '..',  

     beforeEditCell: function(rowid, cellname, value, iRow, iCol) { 
      currentCell={ 
        rowid:rowid, cellname:cellname, value:value, iRow:iRow, iCol:iCol 
      } 
     }    
    }); 
}); 
Các vấn đề liên quan