【问题标题】:Telerik Kendo MVC Grid - Setting Custom FilteringTelerik Kendo MVC Grid - 设置自定义过滤
【发布时间】:2017-08-01 06:13:43
【问题描述】:

我公司的产品大量使用 Telerik MVC 网格(超过 100 个带有网格的网页),我们正在尝试找到方法,通过设置我们的类中的这些部分来最大限度地减少自定义这些网格部分所需的工作量。已调用设置。

这是一个网格示例。你可以看到我们已经成功地使用了 .PageSize() 和 .Pageable(p.PageSizes()) 设置。但是, .Filterable(f.Operators()) 给我带来了麻烦,我希望有人能指出我做错了什么。

网格

@(Html.Kendo().Grid(Model)
    .Name("grid")
    .DataSource(ds => ds
        .Ajax()
        .Filter(filter => filter.Add(group => group.Active).IsEqualTo(true))
        .Model(model =>
        {
            model.Id(m => m.Id);
            model.Field(m => m.Id).DefaultValue(new Guid());
        })
        .PageSize(Settings.DefaultPageSize)  //WORKING
        .Read(read => read.Action("Read", "Users"))
        .Events(events => { events.Error("onDSErrors"); events.RequestEnd("onDSRequestEnd"); })
    )
    .Pageable(p => p
        .PageSizes(Settings.MvcGridPageSizes)  //WORKING
        .Refresh(true)
    )
    .Filterable(f => f
        .Extra(true)
        .Operators(Settings.MVCGridFilterOperators)  //NOT WORKING
    )
    .Columns(columns =>
    {
        columns.Bound(u => u.UserName)
            .Title("Username")
            .Width(200);
        ...
        ...
        ...
    })
)

设置类这是我想做的,但还不能开始工作......

public static class Settings
{

    ...

    public static Action<FilterableOperatorsBuilder> MVCGridFilterOperators
    {
        get
        {
            FilterableOperators operators = new FilterableOperators();
            FilterableOperatorsBuilder builder = new FilterableOperatorsBuilder(operators);

            builder.ForString(x => x
                .Contains("Contains")
                .DoesNotContain("Does not contain")
                .StartsWith("Starts with")
                .EndsWith("Ends with")
                .IsEqualTo("Is equal to")
                .IsNotEqualTo("Is not equal to")
                .IsNull("Is null")
                .IsNotNull("Is not null")
            );

            return builder;
            //Error message I see when hovering over "return builder;":
            //   Cannot implicitly convert type ‘Kendo.Mvc.UI.Fluent.FilterableOperatorsBuilder’ to ‘System.Action<Kendo.Mvc.UI.Fluent.FilterableOperatorsBuilder>’
        }
    }

    ...

}

目前,如果请求任何更改,我们所有网格中的可过滤运算符部分都必须在 100 多个网格中更新,因为它们看起来像这样:

.Operators(o => o
    .ForString(str => str
        .Clear()
        .Contains("Contains")
        .DoesNotContain("Does not contain")
        .StartsWith("Starts with")
        .EndsWith("Ends with")
        .IsEqualTo("Is equal to")
        .IsNotEqualTo("Is not equal to")
    )
)

由于我们使用了如此多的网格,因此更新它们需要一段时间,因为它需要为每个网格复制/粘贴或查找和替换。提前感谢您为我提供的任何帮助!

【问题讨论】:

    标签: c# asp.net-mvc kendo-grid telerik-grid fluent


    【解决方案1】:

    经过一些研究,我发现这是可能的,并且为 kendo mvc 网格上的预设设置开辟了很多可能性。你需要创建一个类似这样的类文件:

    public static class CustomGridHelperExtensions
    {
        public static Kendo.Mvc.UI.Fluent.GridBuilder<T> MyGrid<T>(this HtmlHelper helper)
            where T : class
        {
            return helper.Kendo().Grid<T>()
                .Filterable(filterable => filterable
                    .Extra(true)   //This extended "filterable" section of code makes the contains filter the default string filter for these grids
                    .Operators(operators => operators
                        .ForString(str => str
                            .Clear()
                            .Contains("Contains")
                            .DoesNotContain("Does not contain")
                            .StartsWith("Starts with")
                            .EndsWith("Ends with")
                            .IsEqualTo("Is equal to")
                            .IsNotEqualTo("Is not equal to")
                            .IsNull("Is null")
                            .IsNotNull("Is not null")
                        )
                    )
                );
        }
    

    然后,您可以这样做,而不是设置网格的正常方式

           @(Html.MyGrid<model>() 
    
                         .DataSource(ds => ds
                            .Ajax()
                            .Filter(filter => ...'
    

    我希望这会有所帮助。请注意,我从 Telerek 的论坛中获得了一些此类信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      • 2017-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多