Я использую 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 (при нажатии на маленькую кнопку фильтра) выглядел так, как показано на рисунке ниже.