MVC 剑道网格自定义过滤器

Posted

技术标签:

【中文标题】MVC 剑道网格自定义过滤器【英文标题】:MVC Kendo Grid Custom Filter 【发布时间】:2014-07-19 09:00:43 【问题描述】:

基本上,我正在寻找这个演示的 MVC 版本:

http://demos.telerik.com/kendo-ui/grid/filter-menu-customization

这是我目前拥有的:

.Columns(columns =>
        
            columns.Bound(e => e.ID)
                .Hidden();
            columns.Bound(e => e.SearchFunctionCode)
                .Hidden();
            columns.Bound(e => e.SearchFunctionDesc)                
                .Title("Search Function")
                .Filterable( *** WHAT GOES HERE? *** )
                .htmlAttributes(new  style = "text-align: center" )
                .HeaderHtmlAttributes(new  style = "text-align: center" );

我仍然引用 javascript,还是有其他方法?

<script type="text/javascript">
    function SearchFunctionFilter(element) 
        element.kendoDropDownList(
            dataSource: searchfunctions(),
            optionLabel: "--Select Value--"
        );
    
</script>

【问题讨论】:

【参考方案1】:

是的,我们需要在 javascript 中定义指定的过滤器函数,如下所示。

.Columns(columns => 
        columns.Template(@<text>@item.FirstName  @item.LastName</text>)
                .ClientTemplate("#=FirstName# #=LastName#")
                .Title("Name");
        columns.Bound(e => e.City)
                .Filterable(filterable => filterable.UI("cityFilter"))
                .Width(200);
        columns.Bound(e => e.Title)
                .Filterable(filterable => filterable.UI("titleFilter"))
                .Width(350);   
    )    
    .Filterable(filterable => filterable
        .Extra(false)
        .Operators(operators => operators
            .ForString(str => str.Clear()
                .StartsWith("Starts with")
                .IsEqualTo("Is equal to")
                .IsNotEqualTo("Is not equal to")
            ))
        )   
    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("FilterMenuCustomization_Read", "Grid"))
     )
)

<script type="text/javascript">
    function cityFilter(element) 
        element.kendoDropDownList(
            dataSource: 
                transport: 
                    read: "@Url.Action("FilterMenuCustomization_Cities")"
                
            ,
            optionLabel: "--Select Value--"
        );
    

    function titleFilter(element) 
        element.kendoAutoComplete(
            dataSource: 
                transport: 
                    read: "@Url.Action("FilterMenuCustomization_Titles")"
                
            
        );
    
</script>

看到这个

http://demos.telerik.com/aspnet-mvc/grid/filter-menu-customization

【讨论】:

您将过滤器移至整个网格。我希望使一个特定的列可过滤。而且我想将列选项(编辑/添加时)限制为过滤器中可用的元素。我仍在研究,但我认为我需要将 UIHint 与新的编辑器模板和 Html.DropDownListFor 一起使用 我认为你是对的——他们没有在他们的例子中展示下拉菜单的 UI 是如何工作的。你搞清楚了吗?【参考方案2】:

Malkan 的回答应该有效。您需要做的就是在每列上设置一个单独的过滤器。只需将“可过滤”列替换为您喜欢的任何内容:

    .Filterable(filterable => filterable
    .Extra(false)
    .Operators(operators => operators
        .ForString(str => str.Clear()
            .StartsWith("Starts with")
            .IsEqualTo("Is equal to")
            .IsNotEqualTo("Is not equal to")
        ))
    )   

【讨论】:

以上是关于MVC 剑道网格自定义过滤器的主要内容,如果未能解决你的问题,请参考以下文章

剑道网格自定义列菜单

刷新网格后剑道ui网格可分页大小发生变化

在 MVC 中重新绑定剑道网格

添加新记录按钮在剑道分层网格中不起作用

剑道网格 - 无法使用自定义按钮传递值

剑道 - 通过页面上的代码保存网格过滤器仅存在日期过滤器网格列的问题