如何根据前一页选择过滤 Telerik Grid

Posted

技术标签:

【中文标题】如何根据前一页选择过滤 Telerik Grid【英文标题】:How to get a Telerik Grid filtered based on previous page selection 【发布时间】:2011-07-15 02:42:33 【问题描述】:

我正在尝试做的事情:-

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

例如宠物商店,然后在下一页上的下拉列表中显示商店当前可用的所有该类型的宠物。

已经对日期过滤器进行了排序,因为它已应用于数据绑定。

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

我一直在尝试通过使用 ViewData 来使其正常工作,这对于下拉 但无法填充下一页的网格。

有点像http://demos.telerik.com/aspnet-mvc/grid/selectionserverside,但如果可能的话,可以使用下拉菜单并跨越 2 个页面。

【问题讨论】:

我知道它至少正确存储然后显示正确的信息,因为我在网格页面上添加了 并且它显示了正确的值但认为它不显示任何内容而我必须这样做的原始方式不起作用的一半原因是因为我的项目略有不同并且使用了不同的字段,但事实是它可以用作参考的唯一字段是字符串而不是一个 int 会导致打嗝。 仍在研究它和其他建议的解决方案,但大多数都需要大刀阔斧的改变。 【参考方案1】:

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

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

【讨论】:

您能否详细介绍一下我如何将类别传递给它,然后根据该类别进行过滤【参考方案2】:

来自文档。

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);

【讨论】:

不确定是否只是该链接的信息过载,或者我今天大部分时间都在尝试解决此问题,但查看该链接并没有点击,而且该示例似乎也有点具体到总数,所以您有机会详细了解我如何解决这个问题 但是由于您没有显示,如何设置回发来过滤它,以及如何正确设置下一页以接受它需要的任何内容,然后过滤 Telerik 网格? 我最终使用了不同的方法,但因为这看起来应该可以工作,除非我被告知否则我将把它作为正确答案。【参考方案3】:

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

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

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

HTH

【讨论】:

以上是关于如何根据前一页选择过滤 Telerik Grid的主要内容,如果未能解决你的问题,请参考以下文章

在 Telerik 报表的最后一页上的报表页脚之前显示页脚

Telerik Fiddler Web Debugger 过滤选择监测网站

如何使用 asp.net Web 表单在 Telerik 树中实现搜索和过滤

如何在 Angular(6) 和 firebase Firestore 设置中分页返回前一页

自定义日期 colmn telerik 网格的过滤器选项

Telerik MVC Extensions Grid - 如何让网格过滤器应用于初始 LINQ 查询或传递给 db?