ASP.netデータコントロールでPOCOを使用する場合の並べ替え/ページ機能の実装

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

質問

私はデータセットの大ファンではないため、POCOを使用してデータを返します。ページサイズで動作するPOCOタイプ用に作成したカスタムメソッドを使用してページングとソートを実現し、一度に完全なPOCOコレクションのセットを提供します。クリックしたDataItemの名前をチェックし、ソート順を確認するメソッドを使用しますその並べ替えを行います。 GridviewのようなASP.netデータコントロールで使用する予定のすべてのPOCOに対して、このようなメソッドを何度も作成するのは非常に苦痛です。

DataTableを使用しているかのように動作するように、新しいPOCOのたびにそのようなメソッドを作成する必要がないように、これを自動化する手法はありますか?必要に応じて、さらに説明できます。

注:一部の人々は、POCOをDTOとして呼び出す場合があります。

編集:このトピックに関する記事を見つけました。これは私がやろうとしていることを達成する唯一の方法ですか?

役に立ちましたか?

解決

これによりすべての重複コードが保存されるため、基本クラスの考え方に同意します。私がこの方向に一歩踏み込んだことの1つは、汎用リスト(DTO / POCO用)のソートを処理するクラスを作成することです。これにより、プレゼンターまたはコードビハインドのリストを1行のコードで並べ替えることができました。

通常、SortExpressionの場合、ソートするDTOのプロパティ名を返します。さらに、SortDirectionは単純な「昇順」になります。または" Decending"

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にバインドできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top