在POCO中使用ASP.net数据控件时实现排序/页面功能
-
05-07-2019 - |
题
我不是数据集的忠实粉丝所以我使用POCO来返回数据。我使用我为POCO类型创建的自定义方法实现了分页和排序,这些方法适用于页面大小,并且一次为我提供一组完整的POCO集合,我使用方法检查单击的DataItem的名称和排序顺序到那样做。为计划与Gridview等ASP.net数据控件一起使用的每个POCO反复创建此类方法非常痛苦。
是否有一种自动化技术,以便我不需要每次都为新的POCO制作这样的方法,以便它像使用DataTable一样工作?如果需要,我可以提供更多解释。
注意:有些人可能会将POCO称为DTO。
编辑:我在这个主题上发现了这个文章 。这是唯一可能达到我想做的事情吗?解决方案
我同意基类的想法,因为这将保存所有重复的代码。我做的一件事就是朝这个方向迈出了一步,就是创建一个类来处理任何通用列表的排序(对于DTO / POCO)。这允许我只用一行代码在我的演示者或代码隐藏中对列表进行排序。
通常,对于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);
}
}
}
其他提示
我创建了一个Entity基类。我的DAO派生自它,并具有与表列相对应的属性(大多数情况下)。我的DAL为任何查询返回List,并且可以绑定到GridView。
不隶属于 StackOverflow