2

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

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

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

编辑:我发现这篇关于这个主题的文章。这是实现我想要做的唯一可能的方法吗?

4

2 回答 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);
         }
     }
 }
于 2009-01-07T19:47:24.130 回答
0

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

于 2009-01-07T19:33:16.733 回答