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.
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
@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
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