当用户单击 slick-header-menuitem 下拉列表时,如何将所有数据放入 slickgrid。?

How to get all the data into the slickgrid when user click on the slick-header-menuitem dropdown.?

我有一个 UI 应用程序来显示商业信息。我使用 slick grid 通过使用 slick grid 的所有内置属性以 tabular/grid 结构显示所有业务数据。我使用过滤器 属性 来过滤每一列的数据。

但我有一个条件,我正在从 Azure 存储中获取 1k 数据 table,我将 pageSize 设置为 10,然后传递 pageSize 以在 dataView.setPagingOptions({pageSize :页面大小});当我们在下拉列表中单击 slick-header-menuitem 时,它会显示(升序排序、降序排序、搜索和数据(过滤器 div)中包含的任何网格)。

现在,一旦我点击复选框来过滤数据,无论我需要过滤什么数据,它都会很好地过滤这些数据,而没有任何 issue.Uptill 这里的一切都像我的过滤器下拉列表中的预期一样工作有 4 个选项,例如 (Select All , Blank , IT ,U.S.A ,USA ),如下图所示。

但是问题从这里开始,一旦我在过滤下拉列表(过滤器 div)后再次单击 slick-header-menuitem 显示更多数据,例如 (Select All , Blank , IT ,U.S.A ,USA ,UNITED STATES,US) 因为我已经过滤了数据假设 (IT) 所以在网格中所有数据过滤器并从 1k 记录中获取数据但是它还将获取附加在过滤器 div 选项中的数据,这在以前是不存在的。

参考我的网格看起来像这样(下面是 url)除了搜索和分页

http://danny-sg.github.io/slickgrid-spreadsheet-plugins/examples/example-2-everything.htm

我也附上两张图片

第一张图片表示我第一次点击 slick-header-menuitem 下拉菜单。

第二张图片表示我在过滤数据后再次单击 slick-header-menuitem 下拉菜单。

我浏览了 slickgrid 库,其中有一个插件文件夹,这个文件夹包含过滤器文件夹,过滤器文件夹包含 ext.headerfilter.js 此文件包含名为 "function getFilterValues(dataView, column){...}"、"function getFilterValuesByInput($input){...}" 和 "function getAllFilterValues(data, column){...}" 的方法,我已对其进行调试但不会成功。

经过大量调试终于找到了过滤记录的解决方案 在这里,我不关心 slick-grid 库,根据我的经验,它是一个很棒的库 所以根据我的要求,我在 ext.headerfilter.js 文件中做了一些修改 转到名为 getFilterValues() 和 getFilterValuesByInput($input) 的函数,在这些函数中我对 for 循环做了一些更改,下面的变量是为 getFilterValues() 和 getFilterValuesByInput($input)

实现的代码
function getFilterValues(dataView, column) {
            var seen = [];
           // for (var i = 0; i < dataView.getLength() ; i++) {
            for (var i = 0; i < dataView.getItems().length ; i++) { 
               // var value = dataView.getItem(i)[column.field];
                var value = dataView.getItems()[i][column.field];

                if (!_.contains(seen, value)) {
                    seen.push(value);
                }
            }


            return _.sortBy(seen, function (v) { return v; });
        }

getFilterValuesByInput($input) 代码

function getFilterValuesByInput($input) {
            var column = $input.data("column"),
                filter = $input.val(),
                dataView = grid.getData(),
                seen = [];

           // for (var i = 0; i < dataView.getLength() ; i++) {
            for (var i = 0; i < dataView.getItems().length ; i++) { 
               // var value = dataView.getItem(i)[column.field];
                var value = dataView.getItems()[i][column.field];

                if (filter.length > 0) {
                    var mVal = !value ? '' : value;
                    var lowercaseFilter = filter.toString().toLowerCase();
                    var lowercaseVal = mVal.toString().toLowerCase();
                    if (!_.contains(seen, value) && lowercaseVal.indexOf(lowercaseFilter) > -1) {
                        seen.push(value);
                    }
                }
                else {
                    if (!_.contains(seen, value)) {
                        seen.push(value);
                    }
                }
            }

            return _.sortBy(seen, function (v) { return v; });
        }