2012-01-15 20 views
6

Mã bên dưới đặt giá trị mặc định cho hàng mới nếu hàng được thêm bằng biểu mẫu. Nếu hàng được thêm bằng cách sử dụng nút thêm jqGrid nội tuyến từ thanh công cụ, những phương thức này không được gọi và giá trị mặc định không được đặt.Cách đặt giá trị mặc định nếu hàng được thêm bằng nút thêm nội tuyến trong jqgrid

Làm cách nào để thêm nội tuyến để thực hiện cùng một logic như mã dưới đây?

var lastSelectedRow; 
$grid.navGrid("#grid_toppager", { 
del: true, 
add: true, 
view: true, 
edit: true 
      }, 
      {}, 

     { 
     addedrow: 'beforeSelected', 
     url: '/Grid/Add?_entity=Desktop', 
     beforeInitData: function() { 
     // todo: how to call this method from inline add 
     var rowid = $grid.jqGrid('getGridParam', 'selrow'); 
     if (rowid === null) { 
      alert('Select row before adding'); 
      return false; 
      } 
     }, 

     afterShowForm: function(formID) { 
     // todo: how to set default values as this method sets from inline add 
     var selRowData, 
      rowid = $grid.jqGrid('getGridParam', 'selrow'); 
     $('#' + 'Recordtype' + '.FormElement').val('Veerg'); 
     $('#' + 'Nait2' + '.FormElement')[0].checked = true; 
     selRowData = $grid.jqGrid('getRowData', rowid); 
     $('#' + 'Baas' + '.FormElement').val(selRowData.Baas); 
     $('#' + 'Liigid' + '.FormElement').val(selRowData.Liigid); 
     } 
     ); 


$grid.jqGrid('inlineNav', '#grid_toppager', { 
    addParams: { 
     position: "beforeSelected", 
     rowID: '_empty', 
     useDefValues: true, 
     addRowParams: { 
      keys: true, 
      onEdit : onInlineEdit 
     } 
    }, 

    editParams: { 
     editRowParams: { 
      onEdit : onInlineEdit 
      } 
    }, 

    add: true, 
    edit: false, 
    save: true, 
    cancel: true 
}); 

function onInlineEdit(rowId) { 
    if (rowId && rowId !== lastSelectedRow) { 
     cancelEditing($grid); 
     lastSelectedRow = rowId; 
    } 
    } 

Cập nhật

Tôi đã thử mã

$grid.jqGrid('inlineNav', '#grid_toppager', { 
    addParams: { 
     position: "beforeSelected", 
     rowID: '_empty', 
     useDefValues: true, 
     addRowParams: { 
      keys: true, 
      extraparam: { _dokdata: FormData }, 
      onSuccess : function (jqXHR) { 
alert('addp oncuss'); 
       jqXHRFromOnSuccess=jqXHR; 
       return true; 
       }, 
      afterSave: function (rowID) { 
alert('afeesave addp '); 
       cancelEditing($grid); 
        afterDetailSaveFunc(rowID,jqXHRFromOnSuccess); 
       jqXHRFromOnSuccess=null; 
       }, 
      onError: errorfunc, 
      afterRestore : setFocusToGrid, 
      oneditfunc : function (rowId) { 
       var selRowData, selRowId ; 
       if (rowId && rowId !== lastSelectedRow) { 
       cancelEditing($grid); 
       selRowId = $grid.jqGrid('getGridParam', 'selrow'); 
       if (selRowId) { 
        selRowData = $grid.jqGrid('getRowData', selRowId); 
        $('#' + rowId + '_Reanr').val(selRowData.Reanr); 
        } 
       lastSelectedRow = rowId; 
       } 
      } 
     } 
    } 
); 

Chỉ oneditfunc func được gọi. Làm thế nào để buộc onSuccess, afterSave, onError vv phương pháp được gọi là cũng?

Cập nhật 2

tôi thêm bản vá để jqGrid từ github khuyến cáo trong câu trả lời và cố gắng

$.extend(jQuery.jgrid.inlineEdit, { 
    addParams: { 
    position: "beforeSelected", 
    rowID: '<%= EntityBase.NewRowIdPrefix %>', 
    useDefValues: true, 
    addRowParams: { 
     keys: true, 
     extraparam: { _dokdata: FormData }, 
     onSuccess : function (jqXHR) { 
     jqXHRFromOnSuccess=jqXHR; 
     return true; 
     }, 
     afterSave: function (rowID) { 
       cancelEditing($grid); 
       <% if (Model is RowBase) { %> 
        afterDetailSaveFunc(rowID,jqXHRFromOnSuccess); 
       <% } else { %> 
        afterGridSaveFunc(rowID,jqXHRFromOnSuccess); 
       <% } %> 
       jqXHRFromOnSuccess=null; 
       }, 
     onError: errorfunc, 
     afterRestore : setFocusToGrid, 
     oneditfunc : function (rowId) { 
     if (rowId && rowId !== lastSelectedRow) { 
      cancelEditing($grid); 
      lastSelectedRow = rowId; 
      } 
     } 
     } 
    } 
}); 

tôi trường hợp này nhập không chấm dứt inline thêm. Tất cả các thông số từ mã này đều bị bỏ qua.

Trả lời

5

Bạn nên sử dụng defaultValue thuộc tính của editoptions để đặt giá trị mặc định cho hàng được thêm mới. Trong tài liệu hiện tại, bạn có thể thấy rằng tùy chọn chỉ hợp lệ trong mô-đun Chỉnh sửa biểu mẫu:

Tùy chọn có thể là chuỗi hoặc hàm. Tùy chọn này chỉ hợp lệ trong Mô-đun chỉnh sửa biểu mẫu khi được sử dụng với phương thức editGridRow ở chế độ thêm. Nếu xác định phần tử đầu vào được đặt với giá trị này nếu chỉ phần tử là trống. Nếu được sử dụng trong các lựa chọn, văn bản sẽ được cung cấp chứ không phải khóa. Ngoài ra khi một hàm được sử dụng, hàm sẽ trả về giá trị.

nhưng nếu bạn kiểm tra mã của phương pháp mới addRow bạn sẽ thấy rằng

  1. giá trị mặc định của tùy chọn useDefValuestrue
  2. phương pháp tôi sử dụng (xem here) các defaultValue tài sản của số editoptions.

CẬP NHẬT: OK! Bây giờ tôi thấy vấn đề của bạn. Bạn chỉ sử dụng các thuộc tính sai trong các phần editRowParamsaddRowParams các phần của cài đặt. Đúng sẽ là:

$grid.jqGrid('inlineNav', topPagerSelector, { 
    addParams: { 
     position: "beforeSelected", 
     rowID: '_empty', 
     useDefValues: true, 
     addRowParams: { 
      keys: true, 
      oneditfunc : onInlineEdit 
     } 
    }, 
    editParams: { 
     keys: true, 
     oneditfunc: onInlineEdit 
    }, 
    add: true, 
    edit: false, 
    save: true, 
    cancel: true 
}); 

Hơn nữa bạn có thể sử dụng tính năng mới $.jgrid.inlineEdit thiết keys, oneditfunc hoặc khác thông số chỉnh sửa nội tuyến. Việc triển khai tính năng này không đầy đủ, nhưng bạn có thể kiểm tra phiên bản hiện tại từ github (xem here) và thực hiện sửa đổi tương tự trong phiên bản jquery.jqGrid.src.js của bạn. Trong bất kỳ cách nào tôi khuyên bạn nên sử dụng tính năng $.jgrid.inlineEdit sau khi xuất bản phiên bản tiếp theo của jqGrid.Ưu điểm là bạn có thể dễ dàng thiết lập các tùy chọn của editRow độc lập với vị trí mà hàm sẽ được gọi (từ inlineNav, 'actions' trình định dạng hoặc bất kỳ cách nào khác).

New jqGridInlineEditRow tính năng sự kiện (xem here để biết thêm thông tin) sẽ cho phép bạn thực hiện những hành động giống như những gì bạn làm bây giờ bên trong onInlineEdit kiện mà không việc sử dụng oneditfunc có thể được thiết lập một lần duy nhất.

+0

Cảm ơn bạn rất nhiều. Mã trong câu hỏi truy lục giá trị mặc định từ hàng hiện tại và không cho phép thêm hàng nếu hàng hiện tại không được đặt. Làm thế nào để thực hiện điều này bằng cách sử dụng defaultValue? – Andrus

+0

@Andrus: Chính xác mã làm những việc khác nhau. Các dòng như '$ ('#' + 'Recordtype' + '.FormElement'). Val ('Veerg');' và '$ ('#' + 'Nait2' + '.FormElement') [0] .checked = true; 'là thiết lập thuần túy của các giá trị mặc định. Bởi vì các thiết lập khác tôi không hiểu tại sao bạn không làm các thiết lập bên trong của 'onEdit' handler (trong' onInlineEdit' chức năng trong trường hợp của bạn)? – Oleg

+0

Tôi cần nhận các giá trị từ hàng hiện tại. Tôi không biết cách lấy giá trị hàng hiện tại trong onInlineEdit. Có lẽ hiện tại đã được thêm hàng, không có cách nào để có được các giá trị hàng trước đó. cũng nếu không có hàng hiện tại, inline add shoudl sẽ bị chặn. onInlineedit không cho phép thêm hoạt động, hàng mới đã được thêm vào. – Andrus

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