Filter 如何在ASP.NET的剑道网格上设置初始筛选器

Filter 如何在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")

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

数据包含可筛选的状态。状态包含3个值;“草稿”、“准备审查”和“已发送”

最初,我只想显示状态为“Draft”和“Ready for review”的数据,但用户还应该能够通过更改过滤器查看所有“Sent”项目

如果我按如下所示设置过滤器,过滤器下拉列表将不会显示“已发送”状态

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"))
    )
)
@(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));
}
返回数据;
}
如何设置默认筛选器,但让用户能够更改筛选器(启用不属于默认筛选器的其他值)

换句话说,我希望状态列的默认过滤器(单击“小过滤器”按钮时)如下图所示

我(终于)找到了这个答案,这对我很有帮助:(不知道为什么我的搜索没有更早地找到它)


我想我已经试过了。。。但是我一定是做错了什么-因为这是有效的…

我有一个类似的问题,但是,我使用剑道下拉列表解决了这个问题,并使用更改事件来获取所需的新数据。在您当前的操作方式中,您是否获取了两种状态的所有数据,然后要求网格显示哪种状态,但实际上却让它显示了所有状态?状态下拉列表必须显示所有三种状态,并且只有两种选定状态,而表格仅显示两种选定状态。您是否可以显示更多与网格相关的代码拜托,这肯定会对你有帮助的。