Как установить начальный фильтр в сетке кендо для ASP.NET - PullRequest
0 голосов
/ 28 июня 2018

Я использую Kendo Grid для ASP.NET от Telerik, чтобы показать некоторые данные.

Данные содержат статус, который можно фильтровать. Статус содержит 3 значения; «Черновик», «Готов к рассмотрению» и «Отправлено».

Изначально я хочу отображать данные только со статусом "Черновик" и "Готов к просмотру", но пользователь также должен иметь возможность просматривать все отправленные элементы, изменив фильтр.

Если установить фильтр, как показано ниже, раскрывающийся список фильтров не будет отображать состояние «Отправлено».

Index.cshtml

@(Html.Kendo().Grid<MyEntity>()
    .Name("Grid")
    .EnableCustomBinding(true)
    .Columns(columns => {
        columns
            .Bound(e => e.Created)
            .Filterable(false);
        columns
            .Bound(e => e.Subject)
            .Filterable(false);
        columns
            .Bound(e => e.Status)
            .Filterable(f => f.Multi(true));
    })
    .ClientRowTemplate(
        "<tr data-uid='#: uid #'>" +
        "<td class='col-md-2'>#=kendo.toString(Created,'yyyy-MM-dd')#</td>" +
        "<td class='col-md-6'>#: Subject #</td>" +
        "<td class='col-md-2'>#: Status #</td>" +
        "</tr>"
    )
    .NoRecords("No records found!")
    .Sortable()
    .Filterable()
    .DataSource(dataSource => dataSource
        .Ajax()
        .Sort(sort => {
            sort.Add("Created");
            sort.Add("Status").Ascending();
        })
        .Filter(filters => {
            filters
                .Add(f => f.Status)
                .IsEqualTo("Draft")
                .Or()
                .IsEqualTo("Ready for review");
        })
        .Read(read => read.Action("GetData", "Controller"))
    )
)

Контроллер

public ActionResult GetData([DataSourceRequest] DataSourceRequest request)
{
    // Get data
    var data = db.Data.Where(n => !n.Deleted.HasValue).ToList();

    // Apply sorting
    IQueryable<Xxx> items = data.AsQueryable();

    // Apply filters
    items = items.ApplyFiltering(request.Filters);

    // Calculate the total number of records
    var total = items.Count();

    // Apply sorting
    items = items.ApplySorting(request.Groups, request.Sorts);

    // Apply paging
    items = items.ApplyPaging(request.Page, request.PageSize);

    // Initialize the DataSourceResult
    var result = new DataSourceResult()
    {
        // Process data (paging and sorting applied)
        Data = items,
        // Total number of records
        Total = total
    };

    // Return the result as JSON
    return Json(result);
}

public static IQueryable<T> ApplyFiltering<T>(this IQueryable<T> data, IList<IFilterDescriptor> filterDescriptors)
{
    if (filterDescriptors != null && filterDescriptors.Any())
    {
        data = data.Where(ExpressionBuilder.Expression<T>(filterDescriptors));
    }

    return data;
}

Как установить фильтр по умолчанию, но дать пользователю возможность изменить фильтр (включить другие значения, которые не являются частью фильтра по умолчанию)

Другими словами, я хочу, чтобы фильтр по умолчанию для столбца Status (при нажатии на маленькую кнопку фильтра) выглядел так, как показано на рисунке ниже.

Telerik UI for ASP.NET MVC - Kendo Grid

1 Ответ

0 голосов
/ 14 августа 2018

Я (наконец) нашел этот ответ, который мне помог: https://www.telerik.com/forums/filter-with-multiple-default-values (не знаю, почему мой поиск не нашел его раньше)

Я думал, что попробовал это ... но я, должно быть, сделал что-то не так - потому что это работает ...

...