【问题标题】:Kendo UI Grid - Add/Remove filters dynamicallyKendo UI Grid - 动态添加/删除过滤器
【发布时间】:2018-05-31 10:25:05
【问题描述】:

我需要创建一个 Kendo ui 网格。由于这有很多过滤器,我需要有 4 个常规过滤器,其余的应该能够根据用户的选择动态添加。有人可以提供帮助吗?

【问题讨论】:

  • 好的。但是你为此做了什么?
  • 在网格的数据列上分别添加下拉和文本框的方法很少,但存在一些问题。就像我无法避免过滤每个下拉选择一样。只有当我在文本框中输入内容时才会发生这种情况。其次,我无法阅读选择的下拉值并在文本框中键入文本。如果这两个是可能的,我可以处理剩下的

标签: javascript c# kendo-ui kendo-grid


【解决方案1】:

为了按文本框过滤,您可以连接keyUp 事件以检索值。然后,您可以将其作为过滤器添加到现有的 filter 对象中。

$('#NameOfInput').keyup(function () {
    var val = $('#NameOfInput').val();
    var grid = $("#yourGrid").data("kendoGrid");
    var filter = grid.dataSource.filter();
    filter.filters.push({
        field: "NameOfFieldYouWishToFilter",
        operator: "eq",
        value: val,
        FilterName: "UniqueIdentifierForFilter"
    });
    grid.dataSource.filter(filter);
});

使用下拉框,您可以通过使用onChange 事件来实现所需的功能,使用$('#yourDropDown').val(); 获取值。

FilterName 是可选的,以防您需要额外的逻辑来添加/删除过滤器。也就是说,您可以使用它来确定过滤器是否已存在于数组中,如果存在,您可以使用splice 将其删除。

编辑

使用FilterName,您可以搜索过滤器是否已存在并将其删除:

var filterIndex = filter.filters.map((e: any) => { return e.FilterName }).indexOf("UniqueIdentifierForFilter");
if (filterIndex > -1)
{
    filter.filters.splice(filterIndex, 1);
}

【讨论】:

  • 实际上下拉列表包含其他字段名称。例如,有网站、城市、省。如果我选择省并在文本框中键入“ONT”,它应该按省过滤,值为 ONT。如果我选择城市并输入“COL”它应该按城市过滤,值为COL。希望这是有道理的。
  • 如果要过滤下拉数据源,可以在初始化组件时设置[demos.telerik.com/kendo-ui/dropdownlist/serverfiltering](filter)属性。如果要返回包含输入值的任何项目,可以选择使用filter: "contains"
  • filters.push({ 这部分报错。说push函数未定义。你知道为什么吗?
  • 我对过滤器数组的错误引用进行了更改。这将允许您添加到现有的网格过滤器(而不是像下面的解决方案那样覆盖)
  • 如果有效,别忘了将其标记为答案 ;)
【解决方案2】:

对于@lakshan,虽然这在很大程度上是正确的,但如果一开始没有过滤器,你会得到一个错误。当我遇到未定义的过滤器错误时,我找到了this answer。我将过滤器添加到未定义的过滤器集或与现有过滤器一起添加的完整解决方案:

var grid = $("#ActivityGrid").data("kendoGrid");
var dataSource = grid.dataSource;
var gridFilter = dataSource.filter();
var upcomingFilter = {
    field: "ActivityDate",
    operator: "gte",
    value: new Date(),
    FilterName: "UpcomingOnly"
};
if ($("#UpcomingOnlyCheckbox")[0].checked) {
    if (gridFilter == undefined) {
        dataSource.filter(upcomingFilter);
    }
    else {
        gridFilter.filters.push(upcomingFilter);
        dataSource.filter(gridFilter);
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    相关资源
    最近更新 更多