Как получить сетку Telerik, отфильтрованную на основе выбора предыдущей страницы

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

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

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

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

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

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

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


person Myzifer    schedule 14.03.2011    source источник
comment
Я знаю, что он, по крайней мере, правильно сохраняет, а затем отображает правильную информацию, поскольку я добавил ‹% = ViewData [Ward]%› на странице сетки, и он показал правильное значение, но думаю, половина причины, по которой он ничего не отображает и исходный способ, которым я должен был это сделать, не сработал, потому что мой проект немного отличается и использует разные поля, но тогда тот факт, что единственное поле, которое он может использовать в качестве ссылки, - это строка, а не int, вызывает икоту.   -  person Myzifer    schedule 15.03.2011
comment
все еще работают над этим и другими предлагаемыми решениями, но большинство из них требуют кардинальных изменений.   -  person Myzifer    schedule 15.03.2011


Ответы (3)


Из документации.

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);
}
person BentOnCoding    schedule 14.03.2011
comment
не уверен, что это просто информационная перегрузка этой ссылки или тот факт, что я пытался решить эту проблему большую часть сегодняшнего дня, но, глядя на эту ссылку, он не щелкает, и этот пример кажется слишком конкретным, чтобы просто итоги, так что любой шанс, что вы могу подробно рассказать, как я могу решить эту проблему, пожалуйста - person Myzifer; 14.03.2011
comment
но как настроить обратную связь для фильтрации, если вы этого не показали, и как правильно настроить следующую страницу, чтобы она принимала все, что ей нужно, чтобы затем отфильтровать сетку Telerik? - person Myzifer; 15.03.2011
comment
В итоге я использовал другой метод, но поскольку он выглядит так, как будто он должен работать, если мне не скажут иначе, я оставлю это как правильный ответ. - person Myzifer; 25.03.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
                        });
    }

Передайте категорию обратно и отфильтруйте результаты, прежде чем помещать их в сетку.

person Martin    schedule 14.03.2011
comment
не могли бы вы немного подробнее рассказать о том, как я передал бы в нее категорию, а затем отфильтровал бы ее на основе этого плз - person Myzifer; 14.03.2011

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

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

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

HTH

person CyberDude    schedule 15.03.2011