如何在Kendo Grid for ASP.NET上设置初始筛选器

时间:2018-06-28 06:57:28

标签: filter kendo-grid kendo-asp.net-mvc

我使用Telerik的Ken。Grid for ASP.NET来显示一些数据。

数据包含可以过滤的状态。状态包含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;
}

如何设置默认过滤器,但让用户能够更改过滤器(启用不属于默认过滤器的其他值)

换句话说,我希望“状态”列的默认过滤器(单击小过滤器按钮时)看起来像下面的图像。

Telerik UI for ASP.NET MVC - Kendo Grid

1 个答案:

答案 0 :(得分:0)

我(终于)找到了这个答案,这对我有帮助:https://www.telerik.com/forums/filter-with-multiple-default-values(不知道为什么我的搜索没有更早找到它)

我以为我已经尝试过了...但是我一定做错了-因为这可行...