2012-01-27 2 views
3

При использовании функции bindtoLINQ gridview gridview, он запрашивает весь набор таблиц вместо страницы, на которую смотрит клиент.DevExpress MVC GridView BindToLINQ() Выбирает слишком много данных

IE. с помощью SQL Server Profiler, мы видим, он выбирает все столбцы + строки 200k в таблице вместо только предполагаемого 10.

мнения, выглядит следующим образом:

@Html.DevExpress().GridView(...).BindToLINQ("MyProject.Models.DBEntities", "myTable", (s, e) => { e.KeyExpression = "row_id"; }).GetHtml() 

Сетка действительно выходит хорошо отформатированный на стороне клиента, но поскольку он отображает весь набор данных внутри моей таблицы, любое действие, выполняемое клиентом, будет выполняться слишком плохо - просто переход на следующую страницу займет ок. 15 секунд. Почему gridview не использует LIMIT и pagerow только для выбора необходимых данных, которые видны клиенту? Кажется, что использование команд Linq Skip и Take после выбора всего содержимого таблицы.

Это еще один способ, которым я пробовал, но он ведет себя так же:

// the ActionResult function inside my controller: 
public ActionResult GridViewPartial() { 
    DBEntities dbEntities = new DBEntities(); 
    var myLinqQuery = from s in dbEntities.myTable select new { s.row_id, s.row_username }; 

    return PartialView("GridViewPartial", myLinqQuery); 
} 

// inside the Razor view: 
@model IQueryable 
@Html.DevExpress().GridView(...).BindToLINQ("", "", (s, e) => { e.KeyExpression = "row_id"; e.QueryableSource = Model; }).GetHtml() 

В качестве альтернативы, используя Bind() вместо BindToLINQ() делает то же самое:

// inside the Razor view: 
@model IQueryable 
@Html.DevExpress().GridView(...).Bind(Model).GetHtml() 

ответ

4

Не извлекать данные на стороне контроллера.

ли эту операцию на стороне PartialView:

@Html.DevExpress().GridView(...).BindToLINQ("", "", (s, e) => { 
    e.KeyExpression = "row_id"; 

    DBEntities dbEntities = new DBEntities(); 
    var myLinqQuery = from s in dbEntities.myTable select new { s.row_id, s.row_username }; 

    e.QueryableSource = myLinqQuery; 
}).GetHtml() 

GridViewPartial Действие должен возвращать только PartialView объект:

public ActionResult GridViewPartial() { 
    return PartialView("GridViewPartial"); 
} 
Смежные вопросы