Как получить отфильтрованную сетку Telerik на основе предыдущего выбора страницы
-
22-10-2019 - |
Вопрос
Что я пытаюсь сделать:-
Страница индекса будет иметь раскрывающуюся сторону категорий, выберите 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