Implementación de la función de clasificación / página cuando se utilizan POCO con controles de datos ASP.net

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

Pregunta

No soy un gran admirador de los conjuntos de datos, así que uso POCO para devolver datos. Logré la paginación y la clasificación utilizando métodos personalizados que creé para un tipo de POCO que funciona en el tamaño de la página y me dan un conjunto de la colección completa de POCO a la vez, uso métodos que verifican el nombre del elemento de datos en el que se hizo clic y el orden de clasificación para hacer ese tipo Crear tales métodos una y otra vez para cada POCO que planea usar con un control de datos ASP.net como Gridview es bastante doloroso.

¿Existe una técnica para automatizar esto para que no necesite hacer tales métodos cada vez para un nuevo POCO para que funcione como si estuviera usando una DataTable? Puedo proporcionar una explicación más si es necesario.

NOTA: Algunas personas pueden llamar a POCO como DTO.

EDITAR: encontré este artículo sobre este tema . ¿Es esta la única forma posible de llegar a lo que estoy tratando de hacer?

¿Fue útil?

Solución

Estoy de acuerdo con la idea de la clase base ya que esto guardará todo el código duplicado. Una cosa que hice que da un paso en esta dirección es crear una clase para manejar la clasificación de cualquier lista genérica (para DTO / POCO). Esto me permitió ordenar una lista en mi presentador o código subyacente con solo 1 línea de código.

Por lo general, para SortExpression devuelvo el nombre de propiedad del DTO en el que desea ordenar. Además, SortDirection sería un simple " Ascendente " O '' descendente ''

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

Aquí está la clase que usé

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

Otros consejos

Creé una clase base de entidad. Mis DAO se derivan de él y tienen propiedades correspondientes a las columnas de la tabla (en su mayor parte). Mi DAL devuelve la Lista para cualquier consulta y es vinculable a un GridView.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top