我正在使用KendoUI,我想对它如何进行过滤进行一些研究。我在下面看到了一段代码:
http://demos.telerik.com/aspnet-mvc/grid/filter-row
我写了一段代码如下:
<div id="clientsDb">
@(Html.Kendo().Grid<Prometheus.Core.Domain.Employee>()
.Name("employeeGrid")
.Columns(columns =>
{
columns.Bound(c => c.Id).Width(140).Filterable(ftb => ftb.Cell(cell => cell.Operator("contains")));
columns.Bound(c => c.FirstName).Width(190).Filterable(ftb => ftb.Cell(cell => cell.Operator("contains")));
columns.Bound(c => c.LastName);
})
.HtmlAttributes(new {style = "height: 380px;"})
.Scrollable()
.Groupable()
.Sortable()
.Pageable(pageable => pageable
.Refresh(true)
.PageSizes(true)
.ButtonCount(5))
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action("ReadEmployee", "EmployeeGrid"))))
我没有看到任何错误,但我没有看到任何搜索过滤器在网格中的任何位置启用。
但是,以下代码对我来说很好,它在网格级别添加过滤器而不是在列级别添加过滤器:
<div id="clientsDb">
@(Html.Kendo().Grid<Prometheus.Core.Domain.Employee>()
.Name("employeeGrid")
.Columns(columns =>
{
columns.Bound(c => c.Id).Width(140).Filterable(ftb => ftb.Cell(cell => cell.Operator("contains")));
columns.Bound(c => c.FirstName).Width(500).Filterable(ftb => ftb.Cell(cell => cell.Operator("contains")));
columns.Bound(c => c.LastName);
})
.HtmlAttributes(new { style = "height: 380px;" })
.Scrollable()
.Groupable()
.Sortable()
.Selectable()
.Pageable(pageable => pageable
.Refresh(true)
.PageSizes(true)
.ButtonCount(5))
.Filterable(filterable => filterable
.Extra(true)
.Operators(operators => operators
.ForString(str => str.Clear()
.Contains("Contains")
.IsEqualTo("Exactly matches")
.StartsWith("Starts with")
.DoesNotContain("Does not contain")
.EndsWith("Ends with")
.IsNotEqualTo("Is not equal to")
))).DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action("ReadEmployee", "EmployeeGrid"))))
</div>
我不确定这里有什么大不同,因为两者都使用了几乎相同的可过滤属性。任何想法?
答案 0 :(得分:0)
我认为您需要在第一个代码中应用Filterable()。
答案 1 :(得分:0)
我知道这是一个非常晚的回复,但您需要在第一个示例中在网格级别添加.Filterable(filter => filter.Mode(GridFilterMode.Row))
。值得注意的是,为了在列中使用.Cell(etc...)
样式,它需要处于行过滤模式,因为菜单模式不支持每列选项。
关于为什么会这样,这将是一个很好的问题,但确实如此。