如何强制 Kendo Grid 在列上使用数字过滤器

Posted

技术标签:

【中文标题】如何强制 Kendo Grid 在列上使用数字过滤器【英文标题】:How can I force Kendo Grid to use a numeric filter on a column 【发布时间】:2014-08-25 19:14:27 【问题描述】:

使用以下代码,Kendo Grid 使用t.Files.Count 的字符串过滤器接口,即使类型是int。如何强制网格改为使用数字过滤器 UI?

@(html.Kendo().Grid<GJW_Site.Web.Models.TargetsModel>()    
    .Name("grid")
    .Columns(columns => 
        columns.Bound(t => t.ID).Width(80);
        columns.Bound(t => t.OrbitalPeriod);
        columns.Bound(t => t.Files.Count);
    )
    .Sortable()
    .Filterable()
    .DataSource(dataSource => dataSource.Ajax()
        .PageSize(20)
        .Read(read => read.Action("Targets_Read", "Targets"))
    )
    .Resizable(o => o.Columns(true))
    .ColumnMenu()
)

为字符串生成一个过滤菜单:

我正在使用 Kendo.MVC 2013.1.514.340

【问题讨论】:

【参考方案1】:

解决方案是在模型中指定该值为int - 将DataSource 方法更改为:

.DataSource(dataSource => dataSource.Ajax()
    .PageSize(20)
    .Read(read => read.Action("Targets_Read", "Targets"))
    .Model(m => 
        m.Field<int>(t => t.Files.Count);
    )
)

【讨论】:

这正是我想要的【参考方案2】:

您也可以使用此解决方案:

.DataSource(dataSource => dataSource.Ajax()
    .PageSize(20)
    .Read(read => read.Action("Targets_Read", "Targets"))
    .Model(m => 
        m.Field("Files.Count", typeof(System.Int32));
    )
)

【讨论】:

【参考方案3】:

当我的数据类型为“数字”时,当过滤器用于数据类型字符串时,我遇到了类似的问题,如果声明架构存在差异,则会发生这种情况,请确保架构中声明的字段正确,即具有相同命名为您正在获取/提供给网格的数据。

【讨论】:

【参考方案4】:

Kendo 将能够为每一列选择正确的过滤器类型,但您必须在 TargetsModel 中使用 properties 而不是 fields

例如,使用这个:

public class TargetsModel

    public int ID  get; set; 
    public string OrbitalPeriod  get; set; 
    ...

而不是这个:

public class TargetsModel

    public int ID;
    public string OrbitalPeriod;
    ...

如果由于某种原因您无法做到这一点,.Model() 方法可能是最好的方法。

【讨论】:

以上是关于如何强制 Kendo Grid 在列上使用数字过滤器的主要内容,如果未能解决你的问题,请参考以下文章

如何“使用具有一些默认选择的多复选框过滤器在服务器端过滤 Kendo Grid 数据”

如何在列模板中使用kendo网格聚合值

Kendo UI Grid:可以允许在指定列上而不是在其他列上进行分组

BI Answers/OBIEE- 在不影响行结果的情况下在列上创建过滤器

获取 Kendo UI Grid 中使用的过滤器

如何在 Kendo UI Grid 中获得行号