如何根据以前的页面选择过滤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