【问题标题】:Get Filtered data from Dataview in Slickgrid从 Slickgrid 中的 Dataview 获取过滤后的数据
【发布时间】:2014-06-01 12:42:51
【问题描述】:

我正在使用光滑网格的 dataView 属性在光滑网格中设置数据。我应用了标题行过滤器。我想在单击外部按钮时获取过滤后的数据。我可以使用dataview.getItems() 获取所有数据,但是当我过滤标题行上的数据并使用相同属性dataview.getItems() 时,它返回所有行而不是过滤行数据。

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] = $.trim($(this).val());
                    dataView.refresh();


                }


            });



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

                $(args.node).empty();
                $("<input type='text'>")
           .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 < 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;
                });
                grid.invalidate();
                grid.render();


**console.log(dataview.getItems() )**
            });

【问题讨论】:

  • 你尝试了吗?请提供html,jscript
  • 好的,我正在编辑问题
  • 我在这里找到了解决方案stackoverflow.com/questions/5256327/…我的问题已经解决了,但如果有人能提供更多的解决方案,我将不胜感激

标签: jquery json filter slickgrid dataview


【解决方案1】:

这篇文章很旧,但我也在寻找这样的解决方案。

但是,我遇到的几乎所有帖子也都向我指出了您的解决方案。

我通过为过滤后的行添加一个 getter 来让它工作:

function getFilteredItems(){
    return filteredItems;
}

数据视图中有一个名为filteredItems 的变量。 记得添加

"getFilteredItems" : getFilteredItems

$.extend(this, { ...

【讨论】:

    猜你喜欢
    • 2011-08-28
    • 2012-02-26
    • 1970-01-01
    • 2018-07-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    相关资源
    最近更新 更多