Telerik 获取KendoUI网格中使用的过滤器

Telerik 获取KendoUI网格中使用的过滤器,telerik,kendo-ui,Telerik,Kendo Ui,在KendoUI中,我有一个带过滤器的网格。我更感兴趣的是了解用户为保存而使用的所有过滤器,以便下次用户进来时,它们可以自动填充。如何使用所有过滤器 不确定代码的外观,但应该能够获取网格的数据源对象并调用方法filter()以获取当前应用的数据源过滤器。请看下面的示例,该示例取自: var dataSource=new kendo.data.dataSource({ 数据:[ {name:“Jane Doe”}, {姓名:“约翰·多伊”} ], 筛选器:{字段:“名称”,运算符:“StartW

在KendoUI中,我有一个带过滤器的网格。我更感兴趣的是了解用户为保存而使用的所有过滤器,以便下次用户进来时,它们可以自动填充。如何使用所有过滤器

不确定代码的外观,但应该能够获取网格的数据源对象并调用方法filter()以获取当前应用的数据源过滤器。请看下面的示例,该示例取自:


var dataSource=new kendo.data.dataSource({
数据:[
{name:“Jane Doe”},
{姓名:“约翰·多伊”}
],
筛选器:{字段:“名称”,运算符:“StartWith”,值:“Jane”}
});
var filter=dataSource.filter();
console.log(filter.logic);//显示“和”
console.log(filter.filters[0]);//显示“{field:“name”,操作符:“startswith”,值:“Jane”}”

我的配置是MVC,数据从服务器端获取。我的意思是网格调用此方法以获取其数据:

public ActionResult Documents_Read([DataSourceRequest] DataSourceRequest request, 
        int documentType = (int)ApiGlobals.TrxTypes.חשבונית)
我所做的很简单: 我在会话变量中捕获请求对象,然后在需要时使用会话变量。在以下示例中,我使用过滤器仅打印网格中过滤的文档:

    public ActionResult Documents_Read([DataSourceRequest] DataSourceRequest request, 
        int documentType = (int)ApiGlobals.TrxTypes.חשבונית)
    {
       Session["DocumentListFilter"] = request;
       ...
    }

    public ActionResult PrintListKendo(int documentType)
    {           
        DataSourceRequest request  = (DataSourceRequest)Session["DocumentListFilter"];

        if (request == null)
        {
            request = new DataSourceRequest();
        }

        request.Page = 1;
        request.PageSize = int.MaxValue;

        IQueryable<Document> data = _db.GetDocuments()
           .Where(d => d.TrxTypeId == (int)documentType);

        DataSourceResult filteredData = data.ToDataSourceResult<Document, DocumentListSingleDocumentViewModel>(request,
            d => ViewModelFactory.Create(d));

        //... call the reporting package with the data, etc.
      }
public ActionResult文档\u Read([DataSourceRequest]DataSourceRequest请求,
int documentType=(int)ApiGlobals.TrxTypes
{
会话[“DocumentListFilter”]=请求;
...
}
public ActionResult PrintListKendo(int documentType)
{           
DataSourceRequest请求=(DataSourceRequest)会话[“DocumentListFilter”];
if(请求==null)
{
请求=新数据源请求();
}
请求页=1;
request.PageSize=int.MaxValue;
IQueryable数据=_db.GetDocuments()
。其中(d=>d.TrxTypeId==(int)documentType);
DataSourceResult filteredData=data.ToDataSourceResult(请求,
d=>ViewModelFactory.Create(d));
//…调用包含数据的报告包等。
}

您可以将请求对象(=序列化它,或保存它的属性)保存到数据库中,并在用户打开相关页面且网格获取其数据时重新加载它,

只需添加到上面的答案中即可-如果您希望仅在前端执行此操作,甚至不针对实际的数据源-您可以使用以下

var myGrid = $("#gridname").data("kendoGrid");
myGrid.dataSource.filter().filters[0];
你可以把它分解成不同的参数

myGrid.dataSource.filter().filters[0].field
myGrid.dataSource.filter().filters[0].operator
myGrid.dataSource.filter().filters[0].value

希望这有帮助-干杯

谢谢。这正是我想要的。不知何故,我在他们的文档中遗漏了这一点。出于某种原因,这对我来说总是未定义的。我使用的是MVC剑道,但是通过JSAPI访问。