2009-01-19 50 views
2

在我見過的所有數據打包器示例中(使用綁定到ListView的LinqDataSource),對數據庫的查詢返回完整的記錄集。我怎樣才能得到我想要顯示的行的頁面?asp.net自定義數據打包器

例如,如果我有100萬個與行的表,我想請參閱第5頁上的10個結果,我會得到行51至60

我敢肯定,我一定要實現自定義分頁但我還沒有找到任何好的例子。

+0

Dupe of http://stackoverflow.com/questions/10190/how-to-return-a-page-of-results-from-sql – NotMe 2009-01-19 22:47:47

回答

1

如果您使用MSSql2005,請看看這個article。如你所見,訣竅是使用函數ROW_NUMBER(),它允許你獲取記錄集中某一行的序號。有了它,您可以根據您想要在頁面中獲得的行數簡單地啓用分頁。

2

有很多方法可以做到這一點,但是,我個人喜歡基於SQL的解決方案進入數據庫並獲取結果集。這4GuysFromRolla Article做了很好的解釋。

1

我的印象(斯科特Guthie的博客文章「LINQ to SQL (Part 9)」)下的使用LinqDataSource處理分頁您在數據庫級別:

其中一個非常酷的事情上面需要注意的是,分頁和排序仍然與我們的GridView一起工作 - 即使我們正在使用自定義選擇事件來檢索數據。 這個分頁和排序邏輯發生在數據庫中 - 這意味着我們只需從數據庫中取回10個產品,我們需要顯示GridView中的當前頁面索引(使其效率更高)。

(原文中強調)

如果您使用的是一些自定義分頁,你可以做這樣的事情在LINQ到SQL:

var tagIds = (from t in Tags where tagList.Contains(t.TagText) select t.TagID).Skip(10).Take(10).ToList(); 

這是告訴LINQ採取10行(相當於到T-SQL「TOP 10」),在跳過前10行之後 - 顯然這些值可以是動態的,基於頁面大小和頁碼,但您明白了。

引用的帖子還談到了使用LinqDataSource的自定義表達式。

Scott還提供有關Skip/Take in Part 3的更多信息。