【问题标题】:Implementing sort/page feature when using POCOs with ASP.net Data Controls使用带有 ASP.net 数据控件的 POCO 时实现排序/页面功能
【发布时间】:2010-09-30 02:53:00
【问题描述】:

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

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

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

编辑:我在这个主题上找到了这个article。这是实现我想要做的唯一可能的方法吗??

【问题讨论】:

标签: c# data-binding gridview sorting paging


【解决方案1】:

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

【讨论】:

  • 问题 - 如果您有 100,000 个供应商,这将如何运作?
  • 这是对这种方法的唯一负面影响。以 100,000 个供应商为例 - 您需要点击 SQL 并返回所有记录,将其映射到 List 中,然后调用这 1 行代码进行排序......然后将运行所有 100,000 个对象。 .. 不适合大量数据
【解决方案2】:

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

【讨论】:

  • 我也可以绑定,你是怎么排序分页的??
  • 我在 SQL 级别进行排序和分页,主要是因为在我的情况下,我不知道数据是否更改,所以我决定重新查询。此外,当您对大多数时间进行排序时,无论如何,当前页面中的数据本身都会有所不同。
  • 我还使用 Sorting 事件来确定 ASC、DESC 以及排序依据。
  • @ocdecio = 我也在这样做,但我的处理程序需要做一些事情,比如如果 sortby="FirstName" {sort by Person.Firstname} 你也在这样做吗?
  • 是的。在我的模型中,DAO 属性与表格列名称以及 GridView 上的模板列 ID 匹配,这使得将其添加到排序子句变得很容易。不过,我将 ASC/DESC 存储在会话变量中。
猜你喜欢
  • 2019-03-09
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 2021-09-23
  • 2011-12-31
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多