Implementazione della funzione di ordinamento / pagina quando si utilizzano POCO con controlli dati ASP.net

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

Domanda

Non sono un grande fan dei set di dati, quindi uso POCO per restituire i dati. Ho ottenuto il paging e l'ordinamento usando metodi personalizzati che creo per un tipo POCO che funzionano sulla dimensione della pagina e mi danno un set della raccolta POCO completa alla volta, utilizzo metodi che controllano il nome del DataItem cliccato e ordina per fai quel tipo. Creare tali metodi ripetutamente per ogni POCO che prevedi di utilizzare con un controllo dati ASP.net come Gridview è piuttosto doloroso.

Esiste una tecnica per automatizzare ciò in modo che non sia necessario creare tali metodi ogni volta per un nuovo POCO in modo che funzioni come se si stesse utilizzando una DataTable? Posso fornire qualche spiegazione in più, se necessario.

NOTA: alcune persone potrebbero chiamare POCO come DTO.

EDIT: ho trovato questo articolo su questo argomento . È questo l'unico modo possibile per arrivare a quello che sto cercando di fare ??

È stato utile?

Soluzione

Sono d'accordo con l'idea della classe base in quanto ciò salverà tutto il codice duplicato. Una cosa che ho fatto che fa un passo in questa direzione è creare una classe per gestire l'ordinamento di qualsiasi elenco generico (per DTO / POCO). Questo mi ha permesso di ordinare un elenco nel mio presentatore o code-behind con solo 1 riga di codice.

In genere per SortExpression restituisco il nome della proprietà del DTO che si desidera ordinare. Inoltre, SortDirection sarebbe un semplice "Ascendente" Oppure " Decending "

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

Ecco la classe che ho usato

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

Altri suggerimenti

Ho creato una classe base Entity. I miei DAO ne derivano e hanno proprietà corrispondenti alle colonne della tabella (per la maggior parte). Il mio DAL restituisce l'elenco per qualsiasi query e che è associabile a GridView.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top