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

StackOverflow https://stackoverflow.com/questions/5300656

Вопрос

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

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

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

Уже получил дату, отсортированный, так как это применяется к базе данных.

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

Я пытался заставить это работать с помощью ViewData, которая отлично работает для раскрывающегося <%: html.dropdownlist («категория», (selectlist) viewdata ["categorylist"]), но не может заполнить сеть в Следующая страница.

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

Это было полезно?

Решение

От документов.

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

Другие советы

Я столкнулся с тем же, поэтому я просто использую 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();
            }
        });

    }

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

.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 немного ржавой, и мне не хватает времени для кодировки).

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

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

Hth

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top