特定のGridコントロールを使用する代わりに@foreach Razor構文を使用してデータのページングとソートを実装することが可能かどうかは疑問でした。グリッドのないMVC3ページングとソート?
実装するのは難しいでしょうか?代わりにWebGridやMVCContribグリッドなどの既存のグリッドソリューションに固執する必要がありますか?
特定のGridコントロールを使用する代わりに@foreach Razor構文を使用してデータのページングとソートを実装することが可能かどうかは疑問でした。グリッドのないMVC3ページングとソート?
実装するのは難しいでしょうか?代わりにWebGridやMVCContribグリッドなどの既存のグリッドソリューションに固執する必要がありますか?
私は私のリストを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);
あなたがLINQ
を使用している場合、あなたは、ソートやページングのためのSkip
とTake
方法についてOrderBy
とThenBy
メソッドを使用することができます。リポジトリでこれを行う場合、IQueryable
のController
を実行すると、すべてを引っ張って並べ替えるのではなく、必要なデータだけを取り戻すことができます。
ジェイソンの答えに対する重要なメモ。
メモリ消費と全体的なパフォーマンスに悪影響を与えるので、ToListメソッドは使用しないでください。
IEnumerableオブジェクトが実際にIQueryableであるかどうかを確認し、拡張メソッドSkip and Takeを使用する前に後者の型にキャストする必要があります。これにより、クエリプロバイダは、すべてのレコードを反復処理するのではなく、データベースから選択するために適切なsqlを生成するようになります。
私はOPがサーバーサイドコードを要求しているとは思わない。 並べ替えにtablesorterを使用できます。 ページングについては、URLにページ番号を追加し、サーバー側でデータを制限することをお勧めします。