我正在处理一个屏幕,其中一个屏幕有一个网格,其中包含一个显示数字的列,但是当我尝试过滤它时,它包含"包含"选项。
当我输入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 ")))
模型将这些字段声明为十进制
这是屏幕的生成部分:
另一个屏幕有另一个带有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")
)))
这是屏幕的一部分:
在定义过滤器操作时,一切看起来都相同(除了消息部分),但不知何故,在第一个屏幕上,"包含"操作包括在内,而第二个则不包括。
我错过了什么?
答案 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); })