Filter 如何在ASP.NET的剑道网格上设置初始筛选器
我使用Telerik的Kendo Grid for ASP.NET来显示一些数据 数据包含可筛选的状态。状态包含3个值;“草稿”、“准备审查”和“已发送” 最初,我只想显示状态为“Draft”和“Ready for review”的数据,但用户还应该能够通过更改过滤器查看所有“Sent”项目 如果我按如下所示设置过滤器,过滤器下拉列表将不会显示“已发送”状态 Index.cshtmlFilter 如何在ASP.NET的剑道网格上设置初始筛选器,filter,kendo-grid,kendo-asp.net-mvc,Filter,Kendo Grid,Kendo Asp.net Mvc,我使用Telerik的Kendo Grid for ASP.NET来显示一些数据 数据包含可筛选的状态。状态包含3个值;“草稿”、“准备审查”和“已发送” 最初,我只想显示状态为“Draft”和“Ready for review”的数据,但用户还应该能够通过更改过滤器查看所有“Sent”项目 如果我按如下所示设置过滤器,过滤器下拉列表将不会显示“已发送”状态 Index.cshtml @(Html.Kendo().Grid<MyEntity>() .Name("Grid")
@(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"))
)
)
@(Html.Kendo().Grid())
.名称(“网格”)
.EnableCustomBinding(真)
.列(列=>{
柱
.Bound(e=>e.Created)
.可过滤(假);
柱
.Bound(e=>e.Subject)
.可过滤(假);
柱
.Bound(e=>e.Status)
.Filterable(f=>f.Multi(true));
})
.ClientRowTemplate(
"" +
“#=剑道.toString(已创建,'yyyy-MM-dd')#”+
“#:主题#”+
“#:状态#”+
""
)
.NoRecords(“未找到任何记录!”)
.Sortable()
.可过滤()
.DataSource(DataSource=>DataSource
.Ajax()
.Sort(Sort=>{
排序。添加(“创建”);
sort.Add(“Status”).升序();
})
.Filter(filters=>{
过滤器
.Add(f=>f.Status)
IsEqualTo先生(“草案”)
.或()
.IsEqualTo(“准备审查”);
})
.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;
}
public ActionResult GetData([DataSourceRequest]DataSourceRequest请求)
{
//获取数据
var data=db.data.Where(n=>!n.Deleted.HasValue).ToList();
//应用排序
IQueryable items=data.AsQueryable();
//应用过滤器
items=items.ApplyFiltering(request.Filters);
//计算记录的总数
var total=items.Count();
//应用排序
items=items.ApplySorting(request.Groups、request.Sorts);
//应用分页
items=items.applypage(request.Page,request.PageSize);
//初始化数据源结果
var result=新数据源结果()
{
//过程数据(应用分页和排序)
数据=项目,
//记录总数
总计=总计
};
//将结果作为JSON返回
返回Json(结果);
}
公共静态IQueryable ApplyFiltering(此IQueryable数据,IList filterDescriptors)
{
if(filterDescriptors!=null&&filterDescriptors.Any())
{
data=data.Where(ExpressionBuilder.Expression(filterDescriptors));
}
返回数据;
}
如何设置默认筛选器,但让用户能够更改筛选器(启用不属于默认筛选器的其他值)
换句话说,我希望状态列的默认过滤器(单击“小过滤器”按钮时)如下图所示
我(终于)找到了这个答案,这对我很有帮助:(不知道为什么我的搜索没有更早地找到它)
我想我已经试过了。。。但是我一定是做错了什么-因为这是有效的…我有一个类似的问题,但是,我使用剑道下拉列表解决了这个问题,并使用更改事件来获取所需的新数据。在您当前的操作方式中,您是否获取了两种状态的所有数据,然后要求网格显示哪种状态,但实际上却让它显示了所有状态?状态下拉列表必须显示所有三种状态,并且只有两种选定状态,而表格仅显示两种选定状态。您是否可以显示更多与网格相关的代码拜托,这肯定会对你有帮助的。