2012-11-16 84 views
1

我有以下代碼,刪除行選中(每行有一個複選框,我有一個過濾器按鈕(和其他按鈕)在工具欄中)。Kendo - 網格 - 刪除多行

var grid = $("#resultsGrid").data("kendoGrid"); 
grid.tbody.find("input:checked").closest("tr").each(function(index) { 
    grid.removeRow($(this)); 
}); 

但是,當> 20行被刪除時,性能開始成爲問題。但是,kendo過濾(刪除)20行或更多。 kendo過濾如何從視圖中移除多行?還是有其他更好的方法從網格中刪除多行?在此先感謝您的幫助。

回答

4

**將小提琴更新爲新位置 - 與之前的代碼相同**

嘗試直接處理數據。勾選該行的ID並過濾該複選框。

我鏈接了一個小提琴,它刪除數組元素,然後重新創建網格。網格頂部的2個文本框捕獲您想要移除的Ids的範圍(這將與您的checkboxIds的數組相同)。然後,我通過這些「刪除Ids」進行循環,將它們從數據陣列中移除並重新映射網格。

我稍微修改了以前的小提琴,這就是爲什麼我重新創建網格而不是直接處理DataSource對象。但是我希望你能明白我在做什麼。

我在這個例子中有1000條記錄(只有3列),但它很快刪除了950條記錄。

Fiddle- Remove from data array

讓我知道如果你需要用KendoUI DataSource對象的一個​​例子。

我在下面包含了這段代碼,因爲StackOverflow不會讓我發佈它。

function filterData() { 

    var val1 = $("#val1").val(); 
    var val2 = $("#val2").val(); 

    var removeIndexes = new Array(); 

    for (var i = val1; i <= val2; i++) { 
     removeIndexes.push(i); 
    }  

    $(removeIndexes).each(function(removeIndex) { 
     var removeItemId = this; 
     $(randomData).each(function(dataIndex) { 
      var continueLoop = true; 
      if (this.Id == removeItemId) { 
       randomData.splice(dataIndex, 1); 
       continueLoop = false; 
      } 
      return continueLoop; 
     }); 
    }); 

    createGrid(); 
} 
+0

非常感謝您的幫助!我對延遲迴復表示歉意。我在網格中有很多列,而且重新創建網格太慢了。我只在頁面加載期間創建一次。但是,你的回答指向了正確的方向。我只是按照您的建議更改數據存儲數據,但刷新網格而不是重新創建。此外,網格中的對象很複雜,大約有50個道具。拼接太慢(我猜是因爲複雜的物體?)。相反,我只是創建了一個新的數據陣列,只推送沒有檢查過的ID的項目。再次感謝你的幫助。 – James

+0

嗨,我已經嘗試過你的代碼。但是,當數據超過70行時,它會使瀏覽器變慢,並顯示無響應的腳本警告。有沒有在解決方案,以提高加載時間.. – Razack

+0

你能請更新小提琴?我真的需要它。 –

1

你應該使用批量更新:

$("#resultsGrid").kendoGrid({ 
    dataSource: { 
     batch: true, 
     ... 
    }, ...}); 

var grid = $("#resultsGrid").data("kendoGrid"); 
grid.tbody.find("input:checked").closest("tr").each(function() { 
    var dataItem = grid.dataItem(this); 
    grid.dataSource.remove(dataItem); 
}); 
grid.dataSource.sync(); // this applies batched changes 
+0

如果您使用批量更新,這絕對是您的選擇。 – jrummell