2010-12-01 4 views
0

Я использую Html.Grid из набора объектов, которые извлекаются из базы данных (через LINQ to SQL). Вот код грида (я изменил данные на что-то надуманное). Страница строго типизирована для людей.Как сортировать список в общем

<%=Html.Grid<People>(Model)  
// Display chose solution information. 
    .Columns(column => 
     { 
      column.For(person => person.Name); 
      column.For(person => person.Address.City); 
     } 
    ) 
%> 

В базе данных у меня будет таблица People и таблица адресов, связанная внешним ключом. (Опять же, это надуманно - просто пытаюсь описать проблему.)

Я хочу разрешить пользователю сортировать столбцы в общих чертах. Ранее девелопер жестко сортировкой в ​​контроллере, как так ...

// 
// GET: Results/Grid 
public ActionResult Grid(int id, GridSortOptions sort) 
{ 
    if (sort == null) 
    { 
     sort = new GridSortOptions(); 
    } 

    Solution solution = repository.GetSolution(id); 
    List<People> people = solution.People.ToList(); 
    if (!string.IsNullOrEmpty(sort.Column)) 
    { 
     people = solution.People.ToList().OrderBy(sort.Column, sort.Direction).ToList(); 
    } 

    return PartialView("Grid", people); 
} 

Это прекрасно работает, когда объект я сортировка людей (если я нажму на колонке person.Name для сортировки по возрастанию или по убыванию). Однако, когда я хочу сортировать столбец адресов, я получаю исключение, потому что люди не содержат город ... Адрес делает.

Мой вопрос ... есть ли способ сделать это в целом, не зная, какой тип опережает время? Благодарю.

+0

Некоторые из вашего кода не очень понятны `ViewData [" sort "] = sort;` это то, что должно быть обращено? Есть ли только один уровень объектов Child или более одного? – msarchet 2010-12-02 15:24:34

+0

@msarchet - Я наследую этот код от предыдущего разработчика. Я не считаю, что заявление необходимо. Обновление, чтобы отразить это. Благодарю. – JasCav 2010-12-02 15:43:30

ответ

0

Как насчет сортировщика таблицы javascript? Конечно, это не сработает, если ваш список достаточно велик, чтобы требовать подкачки.

0

Я отправил аналогичный вопрос немного назад. Ответы, которые я получил на этот пост может помочь вам на вашем пути:

Looking for a better way to sort my List<T>

В основном ответы предполагают проведение карта Func <> (или аналогичный) и вызвать соответствующий один в блоке кода.

Смежные вопросы