我使用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;
}
如何设置默认过滤器,但让用户能够更改过滤器(启用不属于默认过滤器的其他值)
换句话说,我希望“状态”列的默认过滤器(单击小过滤器按钮时)看起来像下面的图像。
答案 0 :(得分:0)
我(终于)找到了这个答案,这对我有帮助:https://www.telerik.com/forums/filter-with-multiple-default-values(不知道为什么我的搜索没有更早找到它)
我以为我已经尝试过了...但是我一定做错了-因为这可行...