2011-07-26 13 views
0

特定のGridコントロールを使用する代わりに@foreach Razor構文を使用してデータのページングとソートを実装することが可能かどうかは疑問でした。グリッドのないMVC3ページングとソート?

実装するのは難しいでしょうか?代わりにWebGridやMVCContribグリッドなどの既存のグリッドソリューションに固執する必要がありますか?

答えて

2

私は私のリストをpaginための拡張メソッドを書いた:

public static class DataPager 
    { 
     public static IEnumerable<T> PageData<T>(this IEnumerable<T> source, int currentPage, int pageSize) 
     { 
      var sourceCopy = source.ToList(); 

      if (sourceCopy.Count() < pageSize) 
      { 
       return sourceCopy; 
      } 

      return sourceCopy.Skip((currentPage - 1) * pageSize).Take(pageSize); 
     } 
    } 

は、例えば、あなたのために役に立つかもしれません

var courses = List<Courses>(); // Get courses somehow... 

    int currentPage = 2; 
    int pageSize = 5; 

var pagedCourses = courses.OrderBy(c => c.Course.Title).PageData(currentPage, pageSize); 
1

あなたがLINQを使用している場合、あなたは、ソートやページングのためのSkipTake方法についてOrderByThenByメソッドを使用することができます。リポジトリでこれを行う場合、IQueryableControllerを実行すると、すべてを引っ張って並べ替えるのではなく、必要なデータだけを取り戻すことができます。

2

ジェイソンの答えに対する重要なメモ。

メモリ消費と全体的なパフォーマンスに悪影響を与えるので、ToListメソッドは使用しないでください。

IEnumerableオブジェクトが実際にIQueryableであるかどうかを確認し、拡張メソッドSkip and Takeを使用する前に後者の型にキャストする必要があります。これにより、クエリプロバイダは、すべてのレコードを反復処理するのではなく、データベースから選択するために適切なsqlを生成するようになります。

1

私はOPがサーバーサイドコードを要求しているとは思わない。 並べ替えにtablesorterを使用できます。 ページングについては、URLにページ番号を追加し、サーバー側でデータを制限することをお勧めします。

関連する問題