获取Kendo UI Grid中使用的过滤器

时间:2013-10-18 15:58:20

标签: telerik kendo-ui

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

3 个答案:

答案 0 :(得分:15)

不确定代码的外观,但您应该能够获取Grid的数据源对象并调用方法filter()来获取当前应用的数据源过滤器。请看下面摘自here

的示例
<script>
var dataSource = new kendo.data.DataSource({
  data: [
    { name: "Jane Doe" },
    { name: "John Doe" }
  ],
  filter: { field: "name", operator: "startswith", value: "Jane" }
});
var filter = dataSource.filter();
console.log(filter.logic);  // displays "and"
console.log(filter.filters[0]); // displays '{field: "name", operator: "startswith", value: "Jane"}'
</script>

答案 1 :(得分:2)

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

public ActionResult Documents_Read([DataSourceRequest] DataSourceRequest request, 
        int documentType = (int)ApiGlobals.TrxTypes.חשבונית)

我做的很简单: 我在Session变量中捕获请求对象,然后在需要时使用会话变量。在以下示例中,我使用过滤器仅打印在网格中过滤的文档:

    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.
      }

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

答案 2 :(得分:1)

只是为了添加上面的答案 - 如果你想在前端完全没有定位实际数据源 - 你可以使用以下内容......

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

希望这会有所帮助 - 干杯