Пейджинг на сервере базы данных с помощью Telerik MVC Extensions Grid - PullRequest
1 голос
/ 17 октября 2011

Telerik упоминание эта функция:

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

а как его включить? Все примеры берут IEnumerable того или иного.

Ответы [ 2 ]

2 голосов
/ 17 октября 2011

Это немного зависит от того, как вы отправляете данные в представление.Если оставить запрос linq как ленивый, то произойдет подкачка базы данных.Однако, если в вашем слое данных вы выполняете ToList () или другое перечисление, вы пропустите это, извлекая все данные, и вам придется что-то настраивать, чтобы вручную их выгружать.

Toлучше показать ...

// In your initial page load
public ActionResult Index()
{
    return View(new MyViewModel
    {
        // ... other view data

        // set order or .Where for initial load, but don't use .ToList or enumerate
        MyObjects = _db.MyObjects.OrderBy(m => m.Name)
        // When this is passed into the grid, it will finalize the paging there
        // and when the grid enumerates MyObjects, it will only pull the relevant
        // items from the database.
    });
}

Если вы используете привязку ajax ...

// In an ajax grid responder action
[GridAction]
public ActionResult AjaxGridAction()
{
    // Assuming _db is a CodeFirst DbContext, GridModel will handle filtering,
    // paging, and sorting in the database as linq applies those methods to the
    // IQueryable _db.MyObjects
    return View(new GridModel(_db.MyObjects));
}

Если вы используете шаблон репозитория (хотя DbContext уже действительно является репозиторием),затем он возвращает ленивые объекты:

public IEnumerable<T> GetMyObjects()
{
    // Don't use ToList or enumerate them in your repository - that will
    // pull all the data before the Telerik grid has filtered it.
    return _db.MyObjects;
}

Несмотря на то, что все проходит вокруг IEnumerable, когда приходит время фактически выполнять итерацию по коллекции, конкретный тип (DbSet в приведенных выше примерах) будет тем, что фактически обрабатывает это..

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

_db.MyObjects.Project().To<MyObjectsViewModel>();

По сути, вместо этого выполняется обертывание свойств автопроектов:

_db.MyObjects
    .Select(o => new MyObjectsViewModel { // manually map properties, ewww });
0 голосов
/ 14 августа 2015

Для подкачки / заказа на сервере вы должны установить GridOperationMode.Server prop.

Существует пример использования:

Html.Telerik().Grid<PartnerUserViewModel>()
    .Name("Grid").DataBinding(binding =>    binding.Ajax().OperationMode(GridOperationMode.Server).Select("GetUsers", "Partner")).Columns(columns =>
    {
        columns.Bound(o => o.Representer).Title("Representer");  
    });          
    .Sortable(sorting => sorting.OrderBy(sortOrder => sortOrder.Add(p => p.DateCreated).Descending()))
    .Filterable()
    .Pageable(pager => pager.Position(GridPagerPosition.Both).PageSize(5))
    .Groupable()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...