在我們的應用程序中,用戶可以同時編輯多行。當他點擊保存按鈕時,所有的行都會逐一保存到數據庫中。jqGrid,禁用編輯行
我遇到的問題是,當用戶填寫一些錯誤的例如跳過一個必填字段我想取消保存從那裏和用戶應該能夠糾正錯誤。
我在我的解決方案中缺少的是,我不知道如何在編輯模式中將行保存成功後禁用原始狀態。如果我執行restoreRow,則會顯示編輯前的舊值。
我的代碼(我把我的jqGrid在一個變量叫做網格):
function saveGrid() {
var saveCollection = [];
//Collect all rows in editmode, the rows to be saved.
$.each(grid.getDataIDs(), function (index, id) {
var row = grid.getInd(id, true);
if (row !== false) {
if ($(row).attr('editable') === '1') {
saveCollection.push(id);
}
}
});
//Function to save single row.
function saveSingleRow(rowId) {
var success = false;
grid.saveRow(rowId, function() {
//Row successfully saved.
success = true;
//Here I want to restore the row somehow but not with the old values.
});
//If everything worked out, save next row if there are any left.
if (success) {
saveCollection = $.grep(saveCollection, function (obj) {
return obj !== rowId;
});
if (saveCollection.length > 0) {
return saveSingleRow(saveCollection[0]);
}
}
//If error or the last row, return success status.
return success;
}
//Check if there are any rows in editmode, then begin to save each row.
if (saveCollection.length > 0) {
if (!saveSingleRow(saveCollection[0])) {
//If something went wrong during saving cancel and return from this function.
return;
}
}
//Every row was successfully saved. Reload grid.
grid.trigger('reloadGrid');
}
正如你所看到的,發生一次錯誤,將它從服務器或存儲過程停止驗證錯誤和返回false。但如果發生這種情況讓我們說第四行,那麼第一行到第三行已經成功保存,但仍處於編輯模式。然後用戶會覺得這些行沒有保存。
這是我如何打開我的行進行編輯(內聯編輯)。它發生在用戶點擊工具欄上的編輯按鈕時:
var rows = $.grep(grid.getGridParam('selarrrow'), function() { return true; });
if (rows !== null && rows.length > 0) {
$.each(rows, function (i1, gr) {
if (gr !== null) {
grid.editRow(gr, false);
}
});
}
那麼有沒有一種「反編輯」功能?我現在無法提出更好的主要解決方案。有沒有辦法在開始保存過程之前檢查是否有任何驗證錯誤?然後我可以檢查,然後將所有行發送到服務器並將它們保存在一個事務中。
感謝任何幫助!謝謝。
已更新 解決方案是沒有函數可以在保存後再次鎖定行。這應該在保存成功時自動完成。在這種情況下,問題在於,添加在保存成功返回客戶端後運行的回調函數時,必須返回true才能發生此情況。 所以這是少了什麼(在底部的語句:返回true):
grid.saveRow(rowId, function() {
//Row successfully saved.
success = true;
//Here I want to restore the row somehow but not with the old values.
return true;
});
不幸的是,它沒有工作。我不確定我是否清楚我的問題。我編輯了這篇文章,並添加了如何打開我的行進行編輯的代碼。在用戶編輯數據時,行始終以編輯模式打開。如果保存成功,那麼我會重新加載網格,並且這些行會回到它們原始的只讀狀態。但是,如果在保存過程中出現錯誤,我需要將這些行成功保存以恢復到原始狀態。應用課程並沒有解決問題,我沒有想到它會。 – John
對於它的工作,然後
@John:對不起,但我不確定我是否理解你的正確。要中止行的內聯編輯,可以使用[restoreRow](http://www.trirand.com/jqgridwiki/doku.php?id=wiki:inline_editing#restorerow)。爲了防止行被編輯(直到重新加載網格),可以使用「不可編輯行」類。您問到「在成功保存行後如何禁用編輯模式下的行到原始狀態」。然後你寫道:「我需要將行成功保存回原始狀態」,這是我無法理解的。你如何保存行? – Oleg
相關問題