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

StackOverflow https://stackoverflow.com/questions/421720

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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);
         }
     }
 }

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top