簡體   English   中英

使用jqGrid內聯編輯排序

[英]Sorting with jqGrid Inline editing

有沒有直接方法可以通過內聯編輯在客戶端對jqGrid上的數據進行排序? 即使單擊行標題,當行可編輯時,它也不數據排序

如果某些行正在編輯,則網格無法排序。 我認為您提出這個問題的原因是對內聯編輯的工作方式和排序方式的誤解。

在編輯開始時,來自編輯行的原始數據將保存在內部參數savedRow數組中。 用戶可以隨時將當前修改恢復到原始狀態,或將當前值保存在網格中。 如果啟用了內聯編輯的keys: true選項,則用戶可以使用EscEnter鍵還原/保存當前行的更改。 允許在編輯模式下同時顯示多行,並且用戶可以保存一些行和其他一些還原。

網格排序意味着從內部postData參數應用當前過濾器重建整個網格內容 jqGrid支持多個頁面 網格排序意味着始終對網格的所有數據進行可選過濾的排序。 排序后,如果僅顯示基於page參數值的當前頁面。

要對處於編輯模式的網格進行排序,需要確定當前正在編輯的行應執行的操作。 在通常情況下,丟棄當前更改或保存都不是好的解決方案。 即使人們先嘗試保存當前的編輯數據(舊狀態和當前狀態),然后對數據進行排序,然后再開始編輯一次,在通常情況下卻無法正常工作。 實施這種情況可能是很多問題

  1. 當前的編輯行可能在另一頁上,該頁面現在不可見
  2. 現在可以更改數據了。 因此,用舊數據填充savedRow數組可能是錯誤的,而當前的編輯數據也可能是錯誤的。
  3. 當前的編輯行可以從其他用戶刪除。 因此它不可能存在於新的網格內容中。
  4. 如果我們決定在排序之前保存數據,則在保存期間是否可能存在驗證錯誤或並發錯誤。 因此,需要先要求用戶解決所有沖突,然后才能進行保存。
    ...

因此,對處於編輯模式的網格進行排序並不容易。 實施方式可能取決於項目要求。 由於上述問題(以及許多其他我沒有提到的問題),jqGrid只是測試內部的savedRow數組(用於在編輯開始之前保存行的舊狀態)是否為空。 如果savedRow數組不為空,則有一些行或單元格(在銷售編輯模式下)正在編輯。 在這種情況下,對相應列標題的任何單擊都將被忽略,並且不進行任何排序。

我遇到了同樣的問題-如果有任何行處於編輯模式,則無法排序。 就我而言,用戶編輯狀態是什么都沒關系。 我的網格是clientSide,用戶單擊以提交更改的頁面上有一個保存按鈕。

我進行了一些挖掘,找到了適合我的解決方案。 我希望它可以幫助其他人。 基本上,我要做的是對列標題上的click事件進行重新排序,使我的事件排在第一位。 然后在點擊事件中,我調用saveRows。

這是我從另一個線程獲得的有關事件重新排序的一段代碼:

        $.fn.bindUp = function(name, fn) {
        // bind as you normally would
        // don't want to miss out on any jQuery magic
        this.on(name, fn);

        // Thanks to a comment by @Martin, adding support for
        // namespaced events too.
        this.each(function() {
            var handlers = $._data(this, 'events')[name.split('.')[0]];
            // take out the handler we just inserted from the end
            var handler = handlers.pop();
            // move it at the beginning
            handlers.splice(0, 0, handler);
        });
    };

然后在我的代碼中添加一個處理程序以保存行:

        $("th.ui-th-column", $("#pacPaymenReviewGridNEW")[0].grid.hDiv).bindUp('click', function(e) {
        var $th = $(e.currentTarget).closest("th");
        if ($th.length > 0) {
            pacTransferFundMaint.saveRowsById('#pacPaymenReviewGridNEW');
        }
    });     

經過研究,我發現以下算法:

  1. 捕獲標題單擊事件。 例如('th')。click(function(){})
  2. 發生此事件時,使用saveRow保存處於編輯模式的行數據
  3. 標識被單擊的標題。
  4. 使用該標題以升序或降序對網格數據進行排序。 喜歡
    $('#dataGrid').jqGrid('setGridParam', ({ data: list, sortname: columnHeader, sortorder: 'asc',rowNum: list.length })).trigger('reloadGrid');

  5. 使所選行再次可編輯。 editRow可以用於此目的。

注意:應該在步驟1的事件中執行步驟2至5(標題單擊事件)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM