Implémentation de la fonctionnalité de tri / page lors de l'utilisation de POCO avec des contrôles de données ASP.net

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

Question

Je ne suis pas un grand fan des jeux de données, j'utilise donc POCO pour renvoyer des données. J'ai réussi à faire de la pagination et du tri à l'aide de méthodes personnalisées que je crée pour un type POCO qui fonctionnent sur la taille de la page et me fournissent un ensemble de la collection POCO complète à la fois. J'utilise des méthodes qui vérifient le nom du DataItem cliqué et l'ordre de tri. faire ce genre. La création répétée de telles méthodes pour chaque POCO que vous prévoyez d'utiliser avec un contrôle de données ASP.net tel que Gridview est assez pénible.

Existe-t-il une technique permettant d’automatiser cette opération afin que je n’aie pas besoin de créer de telles méthodes à chaque fois pour un nouveau POCO afin que cela fonctionne comme si vous utilisiez un DataTable? Je peux fournir des explications supplémentaires si nécessaire.

REMARQUE: certaines personnes peuvent appeler POCO en tant que DTO.

EDIT: J'ai trouvé cet article sur ce sujet. . Est-ce la seule façon possible d’arriver à ce que j’essaie de faire?

Était-ce utile?

La solution

Je suis d'accord avec l'idée de la classe de base, car cela enregistrera tout le code en double. Une chose que j'ai faite et qui va dans cette direction est de créer une classe pour gérer le tri de toute liste générique (pour DTO / POCO). Cela m'a permis de trier une liste dans mon présentateur ou mon code-behind avec une seule ligne de code.

Généralement, pour SortExpression, je retourne le nom de la propriété du DTO sur lequel vous voulez trier. En outre, la SortDirection serait un simple " Ascending " Ou "Décrivant"

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

Voici la classe que j'ai utilisée

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

Autres conseils

J'ai créé une classe de base Entity. Mes DAO en dérivent et ont des propriétés correspondant aux colonnes du tableau (pour la plupart). Ma DAL renvoie la liste pour toute requête et pouvant être liée à un GridView.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top