J’utilise la propriété dataView de la grid lisse pour définir les données dans la grid lisse. J’ai appliqué le filtre de rangée d’en-tête. Je veux récupérer des données filtrées sur un bouton externe. Je peux obtenir toutes les données en utilisant dataview.getItems()
, mais lorsque je filtre les données sur la ligne d’en-tête et que j’utilise la même propriété dataview.getItems()
elle renvoie toutes les lignes et non les données de la ligne de filtre.
function bindSlickGrid(myOBJ) { var options = { enableCellNavigation: true, enableColumnReorder: true, multiColumnSort: true, showHeaderRow: true, headerRowHeight: 30 , explicitInitialization: true }; dataView = new Slick.Data.DataView(); grid = new Slick.Grid("#myGrid", dataView, myColList, options); dataView.onRowCountChanged.subscribe(function (e, args) { grid.updateRowCount(); grid.render(); }); dataView.onRowsChanged.subscribe(function (e, args) { grid.invalidateRows(args.rows); grid.render(); }); $(grid.getHeaderRow()).delegate(":input", "change keyup", function (e) { var columnId = $(this).data("columnId"); if (columnId != null) { columnFilters[columnId] = $.sortingm($(this).val()); dataView.refresh(); } }); grid.onHeaderRowCellRendered.subscribe(function (e, args) { $(args.node).empty(); $("") .data("columnId", args.column.id) .val(columnFilters[args.column.id]) .appendTo(args.node); }); grid.init(); dataView.beginUpdate(); dataView.setItems(myOBJ); dataView.setFilter(function (item) { for (var columnId in columnFilters) { if (columnId !== undefined && columnFilters[columnId] !== "") { var c = grid.getColumns()[grid.getColumnIndex(columnId)]; if (item[c.field] != columnFilters[columnId]) { return false; } } } return true; }); dataView.endUpdate(); //Sort data grid.onSort.subscribe(function (e, args) { var cols = args.sortCols; myOBJ.sort(function (dataRow1, dataRow2) { for (var i = 0, l = cols.length; i value2 ? 1 : -1)) * sign; if (result != 0) { return result; } } return 0; }); grid.invalidate(); grid.render(); **console.log(dataview.getItems() )** });
Cet article est vieux, mais je cherchais aussi une solution comme celle-ci.
Cependant, presque tous les messages que j’ai rencontrés m’ont également signalé votre solution.
Je l’ai fait fonctionner en ajoutant un getter pour les lignes filtrées:
function getFilteredItems(){ return filteredItems; }
theres une variable appelée filterItems dans l’affichage de données. n’oubliez pas d’append également
"getFilteredItems" : getFilteredItems
sous
$.extend(this, { ...