如何强制Kendo Grid在列上使用数字filter
使用以下代码,Kendo Grid使用t.Files.Count
的字符串filter接口,即使类型是int
。 如何强制网格使用数字filterUI?
@(Html.Kendo().Grid() .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() )
为字符串生成filter菜单:
我使用的是Kendo.MVC 2013.1.514.340
解决方案是指定值是模型中的int
– 更改DataSource
方法,如下所示:
.DataSource(dataSource => dataSource.Ajax() .PageSize(20) .Read(read => read.Action("Targets_Read", "Targets")) .Model(m => { m.Field(t => t.Files.Count); }) )
您也可以使用此解决方案:
.DataSource(dataSource => dataSource.Ajax() .PageSize(20) .Read(read => read.Action("Targets_Read", "Targets")) .Model(m => { m.Field("Files.Count", typeof(System.Int32)); }) )
当我的数据类型是“数字”时,我遇到了类似问题,当数据类型字符串为过时,如果在声明模式时存在差异,请确保在模式中声明的字段是正确的,即与您获取/提供给网格的数据。
Kendo将能够为每列选择正确的filter类型,但您必须使用属性而不是TargetsModel
的字段 。
例如,使用此:
public class TargetsModel { public int ID { get; set; } public string OrbitalPeriod { get; set; } ... }
而不是这个:
public class TargetsModel { public int ID; public string OrbitalPeriod; ... }
如果由于某种原因你无法做到这一点, .Model()
方法可能是最好的方法。