mleibman / SlickGrid

A lightning fast JavaScript grid/spreadsheet
http://wiki.github.com/mleibman/SlickGrid
MIT License
6.81k stars 1.98k forks source link

large row delete 10000 over #1178

Open ewlove opened 6 years ago

ewlove commented 6 years ago

checked row item delete >> very slow & browser down plase tell me good way..

my source :

function doSelectedRemove(){

var selected = grid.getSelectedRows();
grid.getData().beginUpdate();
$.each(selected, function (index, value) {
    var id = grid.getData().getItem(index).id;
    grid.getData().deleteItem(id) ;
});
grid.getData().endUpdate();  
grid.setSelectedRows([]);

var cnt = grid.getDataLength();
$("#resultCount").text(cnt);

}

function getAjax(){

....

var data = jsonData.rows;

            dataView.setItems(data);

            grid = new Slick.Grid("#myGrid", dataView, columns, options);

            grid.setColumns(columns);

              grid.setSelectionModel(new Slick.RowSelectionModel({selectActiveRow: false}));
              grid.registerPlugin(checkboxSelector);
              var columnpicker = new Slick.Controls.ColumnPicker(columns, grid, options);

              grid.onSort.subscribe(function(e, args) {

                  var cols = args.sortCols;

                  dataView.sort(function(dataRow1, dataRow2) {
                    for (var i = 0, l = cols.length; i < l; i++) {
                      var field = cols[i].sortCol.field;
                      var sign = cols[i].sortAsc ? 1 : -1;
                      var value1 = dataRow1[field], value2 = dataRow2[field];
                      var result = (value1 == value2 ? 0 : (value1 > value2 ? 1 : -1)) * sign;
                      if (result != 0) {
                        return result;
                      }
                    }
                    return 0;
                  });
                });

              dataView.onRowCountChanged.subscribe(function (e, args) {
                    grid.updateRowCount();
                    grid.render();
              });

              dataView.onRowsChanged.subscribe(function (e, args) {
                    grid.invalidateRows(args.rows);
                    grid.render();
              });

}

6pac commented 6 years ago

The only way to do it effectively is to delete multiple rows on the server side. That's not straightforward, especially if the rows you are deleting are not all in one block. The grid uses 'ranges', which are a list of lines, eg: 5,67-233,4000-1000. This can be quite a complex problem, I'm afraid there is not an easy solution.

Here is a reasonable article about RBAR.