Как отфильтровать Telerik Grid на основе выбора предыдущей страницы - PullRequest
0 голосов
/ 14 марта 2011

Что я пытаюсь сделать: -

На странице указателя будет раскрывающийся список, скажем, категорий, выберите 1, затем отправьте, перенаправьте на страницу сетки Telerik со всеми записями, хранящимися в большой таблице выбранной категории.

так, например, зоомагазин, раскрывающийся список типов домашних животных, которые есть в магазине, а затем на следующей странице заполняется сетка со всеми домашними животными этого типа, имеющимися в магазине сегодня.

уже получилфильтр даты отсортирован, так как он применяется к привязке данных. База данных

является соединением через edmx, у нее есть 2 таблицы без связей, но есть, например, таблица категорий / домашних животных, которая входит в детали для каждой категории / домашнего животного изатем есть таблица записей, в которой есть столбец категории / домашнего питомца, в котором две таблицы имеют одно единственное поле.

Я пытался заставить это работать, используя ViewData, который прекрасно работает для выпадающего списка.<%: Html.DropDownList ("category", (SelectList) ViewData ["CategoryList"])%>, но не удается заполнить сетку в следующемстр.

что-то вроде http://demos.telerik.com/aspnet-mvc/grid/selectionserverside, но, если возможно, с раскрывающимся списком и на 2 страницах.

Ответы [ 3 ]

4 голосов
/ 14 марта 2011

Я столкнулся с тем же, поэтому я просто использую jQuery для получения данных для каждой страницы (замените #category на идентификатор выпадающего списка вашей категории):

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

    }

Добавьте это в свой Grid-код:

.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 голос
/ 14 марта 2011

из документов.

Telerik Grid для 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);
}
0 голосов
/ 15 марта 2011

Я могу дать несколько указаний без какого-либо кода (мой MVC немного заржавел, и мне не хватает времени на примеры кода).

Таким образом, в основном у вас есть одна страница с раскрывающимся списком, а затем другая страница ссетка будет.Вам нужно:

  • сделать так, чтобы первая страница была отправлена ​​на страницу сетки (действие формы, указывающее на страницу сетки, а не на себя)
  • на странице сетки, проверьте, получили ли вы вводзначение из раскрывающегося списка, если это так, затем отфильтруйте свои данные на основе этого значения, прежде чем связывать сетку
  • , создайте скрытое поле на этой странице, где вы сохраните значение фильтра, полученное из раскрывающегося списка, чтобы оно не потерялось при поискеgrid
  • в основном проверяет либо раскрывающееся значение, либо значение скрытого поля, чтобы отфильтровать сетку

HTH

...