如何根据以前的页面选择过滤Telerik Grid

我想做的是: –

索引页面将包含所述类别的下拉列表,选择1然后提交,重定向到telerik网格页面,其中所有记录都保存在所选类别的大表中。

因此,例如宠物商店,商店在下一页上有哪种类型的宠物的下拉,网格上填充了商店今天可用的所有类型的宠物。

已经将日期filter排序,因为它已应用于数据绑定。

数据库是通过edmx连接的,它有2个没有关系的表,但是有一个类别/宠物表,详细说明了每个类别/宠物,然后有一个记录表,其中有一个类别/宠物列,其中2表有单个字段incommon。

我一直试图通过使用ViewData来完成这项工作,这对于下拉列表非常合适,但无法填充网格下一页。

所以有点像http://demos.telerik.com/aspnet-mvc/grid/selectionserverside,但如果可能的话有一个下拉菜单和2页。

来自文档。

Telerik Grid for ASP.NET MVC正在使用其内置的基于Linq的表达式引擎来执行网格操作 – 分页,排序和过滤。 但是在某些情况下,开发人员可能希望绕过表达式引擎和页面,自行排序或过滤网格数据。 这称为“自定义绑定”。

inheritance人链接:

http://www.telerik.com/help/aspnet-mvc/telerik-ui-components-grid-data-binding-custom-binding.html

按照例子; 如果这是您加载页面的控制器:

[GridAction] public ActionResult Index(GridCommand command) { IEnumerable data = GetData(command); var dataContext = new NorthwindDataContext(); //Required for pager configuration ViewData["total"] = dataContext.Orders.Count(); return View(data); } 

然后你的post将是一个你可以过滤的地方:

 [GridAction] [HttpPost] public ActionResult Index(GridCommand command) { desiredCategory = this.myDropDownList.SelectedCategory.ToString(); //Change the query here using post back variables IEnumerable data = GetData(command); data = from x in data.[entity name] where x.category = desiredCategory select x; var dataContext = new NorthwindDataContext(); //Required for pager configuration ViewData["total"] = dataContext.Orders.Count(); return View(data); } 

我遇到了同样的事情,所以我只使用jQuery来获取每个页面的数据(将#category替换为你的类别下拉列表的ID):

  function onDataBinding(e) { showWaitDialog(); var grid = $('#Grid').data('tGrid'); var args = 'page=' + e.page + '&category' + $('#category').val(); $.ajax({ url: "/Search/AjaxBinding/", type: "POST", data: args, dataType: "json", success: function (data) { grid.total = data.total; grid.dataBind(data.data); hideWaitDialog(); } }); } 

将其添加到您的网格代码:

 .ClientEvents(x => x.OnDataBinding("onDataBinding")) 

控制器代码:

  [GridAction(EnableCustomBinding = true)] public ActionResult AjaxBinding(int page, int category) { var searchResultsViewModel = //Code to get search results return View(new GridModel { Data = searchResultsViewModel.SearchResults, Total = searchResultsViewModel.TotalCount }); } 

将类别传回,并在将结果放入网格之前对结果进行过滤。

我可以在没有任何代码的情况下给出一些指示(我的MVC有点生疏,我没时间编写代码)。

所以基本上你有一个下拉页面,然后是网格所在的另一个页面。 你需要的是:

  • 将第一页提交到网格页面(表单操作指向网格页面而不是自身)
  • 在网格页面上查看是否从下拉列表中收到输入值,如果是,则在绑定网格之前根据该值过滤数据
  • 在此页面上发出一个隐藏字段,您可以在其中存储从下拉列表中收到的filter值,以便在分页时不会丢失该字段
  • 基本上检查下拉值或隐藏字段值以过滤网格

HTH