如何在启动时将过滤器应用于kendo网格数据源

时间:2017-06-28 15:46:47

标签: kendo-ui kendo-grid kendo-asp.net-mvc kendo-datasource

我的应用程序有一个剑道网格。

我可以使用网格外的几个下拉列表来过滤网格。

当我点击搜索时,我将过滤器添加到数据源过滤器列表中。例如,

var dataSource = $("#grid").data("kendoGrid").dataSource;
            var dataSourceFilterQuery = new Array();

    if ($("#something").data("kendoDropDownList").value() !== null) {
                    dataSourceFilterQuery.push({ field: "something", operator: "IsGreaterThanOrEqualTo", value: ($("#something").data("kendoDropDownList").value()) });
            }

            dataSource.filter(dataSourceFilterQuery);     

然后我得到了我想要的结果。有用。 然后,我可以将所有下拉列表的值保存为localStorage中的一个过滤器。

 const filtersObject = {
                Something: whatever.value(),
                ...
            };

            this.storage.setItem("Filter", JSON.stringify(filtersObject));

当我重新启动应用程序时,下拉列表中填充了localStorage中的任何内容

const filter =  JSON.parse(localStorage.getItem("Filter"));

                $("#something").data("kendoDropDownList").value(filters.whatever || "");                
            }

问题是,我想在应用程序启动时将这些过滤器(如果它们存在于localStorage中)添加到数据源,以便用户可以看到应用程序启动时保存的过滤器的结果,而不必单击再次搜索。

所以,我想要的是应用这个

var dataSource = $("#grid").data("kendoGrid").dataSource;
            var dataSourceFilterQuery = new Array();

    if ($("#something").data("kendoDropDownList").value() !== null) {
                    dataSourceFilterQuery.push({ field: "something", operator: "IsGreaterThanOrEqualTo", value: ($("#something").data("kendoDropDownList").value()) });
            }

            dataSource.filter(dataSourceFilterQuery); 

显示网格之前。

这可能吗?

事先提前。

1 个答案:

答案 0 :(得分:1)

使用

配置网格
autoBind: false 

http://docs.telerik.com/kendo-ui/api/javascript/ui/grid#configuration-autoBind

当页面加载时,调用过滤器设置,然后手动触发网格加载(通过dataSource.read())