2011-10-30 27 views
5

Nút thanh công cụ thêm được sử dụng để thêm hàng mới vào jqgrid. Thêm biểu mẫu xuất hiện chứa tất cả các vlaues đã lưu trống. Làm thế nào để đặt thêm giá trị trường biểu mẫu từ các giá trị cột từ hàng hiện tại/được chọn khi lệnh thêm được phát hành? dữ liệu từ xa json được sử dụng. Hoặc nếu điều này đơn giản hơn, làm cách nào để gọi phương thức máy chủ truyền dòng hiện tại/đã chọn để truy xuất các giá trị mặc định để thêm biểu mẫu từ máy chủ?Cách đặt giá trị trường mặc định để thêm biểu mẫu trong jqgrid từ hàng hiện tại

jqgrid cũng chứa các cột bị ẩn. Nếu các giá trị có thể có từ các cột ẩn từ hàng hiện tại cũng sẽ được gửi để thêm bộ điều khiển nếu thêm biểu mẫu được lưu.

Cập nhật

Tôi cố gắng để sử dụng Oleg gợi ý tuyệt vời bằng cách sử dụng

  afterShowForm: function(formID) { 
      var selRowData, 
       rowid = grid.jqGrid('getGridParam', 'selrow'); 
      if (rowid === null) { 
      // todo: how to cancel add command here 
      alert('Please select row'); 
      return; 
      } 

      selRowData = grid.jqGrid('getRowData', rowid); 
      if (selRowData === null) { 
      alert('something unexpected happened'); 
      return; 
      } 

      $('#' + 'Baas' + '.FormElement', formID).val(selRowData.Baas); 
      } 

Application giữ thêm hình thức mở sau khi tiết kiệm. Sau lần đầu tiên lưu trường Baas trống. Có vẻ như sự kiện afterShowForm chỉ chạy một lần, không phải sau mỗi lần lưu. Cách khắc phục điều này để nhiều hàng có giá trị mặc định có thể được thêm mà không đóng biểu mẫu thêm? Làm cách nào để hủy hoặc không cho phép lệnh Thêm nếu không có hàng đã chọn?

Trả lời

4

Nếu bạn cần phải thực hiện một số hành động khởi tạo chỉ dành cho Add hình thức bạn có thể sử dụng ít nhất hai phương pháp:

  • việc sử dụng tài sản defaultValue như chức năng bên trong của editoptions. Hàm gọi lại defaultValue có thể cung cấp giá trị cho trường tương ứng của biểu mẫu Thêm dựa trên dữ liệu từ hàng đã chọn. Với mục đích tối ưu hóa, bạn có thể đọc dữ liệu từ hàng đã chọn hiện tại một lần trong cuộc gọi/sự kiện beforeInitData. Bạn chỉ có thể đọc dữ liệu mà bạn cần hoặc thực hiện cuộc gọi đồng bộ đến máy chủ để nhận thông tin bạn cần. Bất lợi duy nhất của việc sử dụng tài sản defaultValue là nó sử dụng phương thức jQuery.val để đặt giá trị mặc định cho tất cả các trường Thêm biểu mẫu có ngoại lệ 'hộp kiểm' edittype. Đối với hộp kiểm jqGrid đặt thuộc tính đã chọn của hộp kiểm của false, 0, no, off hoặc undefined không được tìm thấy trong giá trị được trả về bởi defaultValue thuộc tính. Vì vậy, cách tiếp cận sẽ không hoạt động đối với các loại chỉnh sửa khác. Ví dụ: nó có thể bị lỗi đối với loại chỉnh sửa custom.
  • cách sử dụng beforeShowForm hoặc afterShowForm. Bên trong các hàm gọi lại, bạn có thể đặt bất kỳ giá trị nào của biểu mẫu. Bạn có thể tìm thấy các đệ trình của cột tương ứng của lưới bằng id của trường đó là giống như giá trị của name thuộc tính của cột tương ứng.

Giống như bạn đã biết bạn có thể lấy id của hàng đã chọn hiện sự tôn trọng của getGridParam với và lấy dữ liệu từ các hàng đã chọn

var selRowData, rowid = grid.jqGrid('getGridParam', 'selrow'); 
if (rowid !== null) { 
    // a row of grid is selected and we can get the data from the row 
    // which includes the data from all visible and hidden columns 
    selRowData= grid.jqGrid('getGridParam', 'selrow'); 
} 

nơi grid là jQuery đối tượng như $('#list') mà chọn chính <table> phần tử của lưới.

Trong the demo bạn có thể xem cách hoạt động của phương pháp tiếp cận đầu tiên được mô tả ở trên.

+0

Cảm ơn bạn. Trong một số trường hợp, cần phải đặt giá trị mặc định cho các trường tự động hoàn thành jqueryUI được sử dụng cho mục nhập khóa ngoài từ các bảng tra cứu lớn.tự động điền được triển khai dưới dạng phần tử chỉnh sửa tùy chỉnh. Vui lòng xác nhận, là cách tốt nhất để sử dụng trước khiShowForm trong trường hợp này? Chúng ta có nên sử dụng beforeShowForm trong các lĩnh vực khác cũng do điều này để tránh trộn hai phương pháp để thiết lập giá trị mặc định? Nơi tìm mã mẫu đặt giá trị mặc định của trường tự động hoàn thành jqueryui trong biểu mẫu thêm? – Andrus

+0

mẫu mã trong mẫu trả lời gọi 'grid.jqGrid ('getGridParam', 'selrow');' hai lần – Andrus

+0

@Andrus: Tôi không thể nói bạn là cách nào * tốt nhất *. Nó có thể phụ thuộc vào nhiều thông số. jQuery UI Autocomplete 'source' cung cấp cho bạn nhiều khả năng làm thế nào bạn có thể lấy dữ liệu từ máy chủ, vì vậy bạn nên tự chọn cho mình cách nào là * tốt nhất cho môi trường của bạn *. Tôi chỉ mô tả hai cách mà cả hai có thể được thực hiện tốt. – Oleg

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