簡體   English   中英

Telerik Kendo MVC網格-設置自定義過濾

[英]Telerik Kendo MVC Grid - Setting Custom Filtering

我公司的產品大量使用Telerik MVC網格(帶有網格的100多個網頁),並且我們試圖通過從我們稱為“設置”的類中設置部分來最小化自定義這些網格的部分所需的工作量。

這是一個網格的例子。 您可以看到,我們已經成功使用.PageSize()和.Pageable(p.PageSizes())設置完成了此工作。 但是,.Filterable(f.Operators())給我帶來麻煩,我希望有人可以指出我做錯了什么。

GRID

@(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多個網格中的每個網格中更新我們所有網格中的filterable運算符部分,因為它們看起來像這樣:

.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")
    )
)

由於我們使用了許多網格,因此更新它們需要一段時間,因為它需要復制/粘貼或查找並替換每個網格。 預先感謝您為我提供的任何幫助!

經過一番研究,我發現這是可能的,並且為kendo mvc網格上的預設設置打開了很多可能性。 您需要創建類似於以下內容的類文件:

public static class CustomGridHelperExtensions
{
    public static Kendo.Mvc.UI.Fluent.GridBuilder<T> MyGrid<T>(this HtmlHelper helper, string name)
        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>("grid") //"grid" is name of grid.  You could leave this out
                     .DataSource(ds => ds
                        .Ajax()
                        .Filter(filter => ...'

我希望這有幫助。 請注意,我從Telerek的論壇中獲得了一些此類信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM