Реализация функции сортировки / страницы при использовании POCO с элементами управления данными ASP.net - PullRequest
2 голосов
/ 07 января 2009

Я не большой поклонник наборов данных, поэтому я использую POCO для возврата данных. Я добился разбиения по страницам и сортировки с помощью пользовательских методов, которые я создаю для типа POCO, которые работают с размером страницы и дают мне набор полной коллекции POCO за раз, я использую методы, которые проверяют имя нажатого элемента DataItem и сортируют сделать это Создание таких методов снова и снова для каждого POCO, которое вы планируете использовать с элементом управления данными ASP.net, таким как Gridview, довольно болезненно.

Существует ли метод для автоматизации этого, чтобы мне не приходилось каждый раз создавать такие методы для нового POCO, чтобы он работал так, как если бы вы использовали DataTable? Я могу предоставить некоторые дополнительные объяснения, если требуется.

ПРИМЕЧАНИЕ. Некоторые люди могут называть POCO DTO.

РЕДАКТИРОВАТЬ: Я нашел эту статью по этой теме. Это единственный возможный способ добраться до того, что я пытаюсь сделать ??

Ответы [ 2 ]

3 голосов
/ 07 января 2009

Я согласен с идеей базового класса, так как при этом будет сохранен весь дублирующий код. Одна вещь, которую я сделал, которая делает шаг в этом направлении, - это создание класса для обработки сортировки любого общего списка (для DTO / POCO). Это позволило мне отсортировать список в моем докладчике или коде только с 1 строкой кода.

Обычно для SortExpression я возвращаю имя свойства DTO, по которому вы хотите отсортировать. Кроме того, SortDirection будет простым «По возрастанию» или «По убыванию»

List<Supplier> SupplierList = mSupplierService.GetSuppliers();
SupplierList.Sort(new GenericComparer<Supplier>(mView.SortExpression, mView.SortDirection));
mView.Suppliers = SupplierList;

Вот класс, который я использовал

public class GenericComparer<T> : IComparer<T>
 {

     private string mDirection;
     private string mExpression;

     public GenericComparer(string Expression, string Direction)
     {
         mExpression = Expression;
         mDirection = Direction;
     }

     public int Compare(T x, T y)
     {
         PropertyInfo propertyInfo = typeof(T).GetProperty(mExpression);
         IComparable obj1 = (IComparable)propertyInfo.GetValue(x, null);
         IComparable obj2 = (IComparable)propertyInfo.GetValue(y, null);
         if (mDirection == "Ascending") {
             return obj1.CompareTo(obj2);
         }
         else {
             return obj2.CompareTo(obj1);
         }
     }
 }
0 голосов
/ 07 января 2009

Я создал базовый класс Entity. Мои DAO являются производными от него и имеют свойства, соответствующие столбцам таблицы (по большей части). Мой DAL возвращает List для любого запроса, который можно привязать к GridView.

...