使用 POCO 与 ASP.net 数据控件时实现排序/分页功能

问题描述 投票:0回答:2

我不太喜欢数据集,所以我使用 POCO 来返回数据。我已经使用为 POCO 类型创建的自定义方法实现了分页和排序,这些方法适用于页面大小,并一次给我一组完整的 POCO 集合,我使用检查单击的 DataItem 名称和排序顺序的方法做那种事。为您计划与 Gridview 等 ASP.net 数据控件一起使用的每个 POCO 一遍又一遍地创建此类方法是非常痛苦的。

是否有一种技术可以自动执行此操作,以便我不需要每次为新的 POCO 都创建此类方法,以便它像使用 DataTable 一样工作?如果需要,我可以提供更多解释。

注意:有些人可能将 POCO 称为 DTO。

编辑:我找到了关于这个主题的文章。这是实现我想做的事情的唯一可能的方法吗?

c# sorting gridview data-binding pagination
2个回答
3
投票

我同意基类的想法,因为这将保存所有重复的代码。 我朝这个方向迈出了一步的一件事是创建一个类来处理任何通用列表的排序(对于 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
投票

我创建了一个实体基类。我的 DAO 派生自它,并具有与表列相对应的属性(大部分)。我的 DAL 为任何查询返回列表,并且可绑定到 GridView。

© www.soinside.com 2019 - 2024. All rights reserved.