如何排除MVC Kendo Grid的列过滤器"包含"选项?

时间:2018-05-16 14:46:44

标签: model-view-controller kendo-grid filtering

我正在处理一个屏幕,其中一个屏幕有一个网格,其中包含一个显示数字的列,但是当我尝试过滤它时,它包含"包含"选项。

当我输入0时,我收到错误。

我需要将该列过滤为数字而不是字符串。

这是代码的片段:

columns.Bound(x => x.DebitAmount).Title("Debit").Width(300).ClientTemplate("#=kendo.toString(DebitAmount,'c') #").ClientFooterTemplate("#=kendo.toString(sum,'c') #");
columns.Bound(x => x.CreditAmount).Title("Credit").Width(300).ClientTemplate("#=kendo.toString(CreditAmount,'c') #").ClientFooterTemplate("#=kendo.toString(sum,'c') #");

..................

.Filterable(ftb => ftb.Mode(GridFilterMode.Menu)
       .Extra(false)
       .Operators(operators => operators
       .ForString(str => str.Clear()
       .Contains("Contains")
       .IsEqualTo("EqualTo")
       .IsNotEqualTo("NotEqualTo")
       .IsEmpty("Empty")))
       .Operators(operators => operators
       .ForNumber(str => str.Clear()
      .IsEqualTo("EqualTo")
      .IsGreaterThan("GreaterThan")
      .IsLessThan("LessThan")
       )).Messages(m => m.IsFalse(" False "))
    .Messages(m => m.IsTrue("True ")))

模型将这些字段声明为十进制

这是屏幕的生成部分:

enter image description here

另一个屏幕有另一个带有Amount字段的可过滤网格。所有选项都以相同的方式声明,但Amount字段的屏幕过滤器不包含"包含"显示时的选项。

这是代码:

columns.Bound(c => c.Amount).Title("Amount").ClientTemplate("#= kendo.toString(Amount,'c')#").Width("120px");

......................

    .Filterable(ftb => ftb.Mode(GridFilterMode.Menu)
    .Extra(false)
    .Operators(operators => operators
    .ForString(str => str.Clear()
    .Contains("Contains")
    .IsEqualTo("EqualTo")
    .IsNotEqualTo("NotEqualTo")
    .IsEmpty("Empty")))
    .Operators(operators => operators
    .ForNumber(str => str.Clear()
   .IsEqualTo("EqualTo")
   .IsGreaterThan("GreaterThan")
   .IsLessThan("LessThan")
    )))

这是屏幕的一部分:

enter image description here

在定义过滤器操作时,一切看起来都相同(除了消息部分),但不知何故,在第一个屏幕上,"包含"操作包括在内,而第二个则不包括。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

我在这里找到了解决方案:How can I force Kendo Grid to use a numeric filter on a column

在定义数据源时,我必须添加以下转换逻辑:

.Model(c => { c.Field<decimal>(d => d.DebitAmount); })
.Model(c => { c.Field<decimal>(d => d.CreditAmount); })
.Model(c => { c.Field<DateTime>(d => d.RequestedDate); })