filter - 如何在 ASP.NET 的 Kendo Grid 上设置初始过滤器
问题描述
我使用 Telerik 的 Kendo Grid for ASP.NET 来显示一些数据。
数据包含可以过滤的状态。状态包含 3 个值;“草稿”、“准备审核”和“已发送”。
最初,我只想显示状态为“草稿”和“准备审核”的数据 - 但用户还应该能够通过更改过滤器查看所有“已发送”项目。
如果我按如下所示设置过滤器,过滤器下拉菜单将不会显示“已发送”状态。
索引.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;
}
如何设置默认过滤器,但让用户能够更改过滤器(启用不属于默认过滤器的其他值)
换句话说,我希望状态列的默认过滤器(单击小过滤器按钮时)看起来像下图。
解决方案
我(终于)找到了这个答案,这对我有帮助:https://www.telerik.com/forums/filter-with-multiple-default-values(不知道为什么我的搜索没有早点找到它)
我以为我已经尝试过了...但我一定做错了什么-因为这行得通...
推荐阅读
- java - 当我安装了 jdk 13 但在 cmd 中它显示了 java 7 的版本
- javascript - 有没有办法从我的例子中检查和取消选中“复选框”?
- gridview - 如何在函数中使用 $categoryId
- python - Python - 字典 - 如果循环变量没有改变
- blob - react-native 将文件从本地存储上传到 firebase 网络请求失败
- python - 气流,从 dag 调用 dags 会导致重复的 dagruns
- java - 我想在 Android Studio 的 Retrofit 中将温度值从单位转换为英制
- visual-studio-2019 - Visual Studio 2019 在 .Net Core 3.1 解决方案中创建 .NetStandard 2.0.3 库而不是 2.1
- spring - 在 minikube 中安装后 Spring Cloud Dataflow UI 异常
- haskell - 如何解决 Haskell 代码错误“<>' is not a (visible) method of class `Monoid'”?