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

时间:2011-03-14 15:24:06

标签: c# asp.net-mvc asp.net-mvc-3 telerik telerik-grid

我正在尝试做什么: -

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

所以例如宠物商店,商店在下一页下载哪种类型的宠物的网格下载了一个网格,其中包含了商店现有的所有类型的宠物。

已将日期过滤器排序,因为它已应用于数据绑定。

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

我一直试图通过使用ViewData来完成这项工作,ViewData对于下拉列表非常合适<%:Html.DropDownList(“category”,(SelectList)ViewData [“CategoryList”])%>但无法在下一页填充网格。

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

3 个答案:

答案 0 :(得分:4)

我遇到了同样的事情,所以我只使用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
                        });
    }

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

答案 1 :(得分:1)

来自文档。

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

继承人的链接:

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

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

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

    return View(data);
}

然后你的帖子将会是一个你可以过滤它的地方:

[GridAction]
[HttpPost]
public ActionResult Index(GridCommand command)
{
    desiredCategory = this.myDropDownList.SelectedCategory.ToString();

    //Change the query here using post back variables
    IEnumerable<Order> 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);
}

答案 2 :(得分:0)

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

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

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

HTH