2009-04-18 42 views
5

我創建了一個使用Linqfor數據訪問的頁面,我使用DataList來顯示數據。我如何使用Linq進行數據分頁?請閱讀下面的簡單代碼:linq的Datalist分頁

我通常使用PagedDatasource,但這似乎只適用於DataTable。

這裏是我的LINQ到返回的DataTable這與Datalist中勢必:

公共共享功能GetStudentList()作爲數據表

Dim db As New DemoDataClassesDataContext() 

    Dim query = From st In db.students _ 
       Order By st.st_studentid Ascending _ 
       Select st 

    Dim dtStudent = New DataTable("myst") 


    dtStudent.Columns.Add("st_id", GetType(Integer)) 
    dtStudent.Columns.Add("st_userid", GetType(Guid)) 
    dtStudent.Columns.Add("st_studentid", GetType(Integer)) 
    dtStudent.Columns.Add("st_firstname", GetType(String)) 
    dtStudent.Columns.Add("st_lastname", GetType(String)) 
    dtStudent.Columns.Add("st_gender", GetType(String)) 
    dtStudent.Columns.Add("st_email", GetType(String)) 


    For Each q In query 
     dtStudent.Rows.Add(New Object() {q.st_id, q.st_userid, q.st_studentid, q.st_firstname, q.st_lastname, q.st_gender, q.st_email}) 
    Next 

    Return dtStudent 

End Function 

在代碼的頁面的背後:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    If Not Page.IsPostBack() Then 
     LoadData() 
    End If 

End Sub 

Private Sub LoadData() 
    dsStduent = da_Student.GetStudentList() 
    dt_Student.DataSource = dsStduent 
    dt_Student.DataBind() 

End Sub 

回答

8

你會發現方法.Skip() and .Take()非常有用。

我注意到你從你的項目中提供了一些代碼,所以這裏是你應該如何實現這些方法的更新。

在您的用於獲取數據的方法,請執行以下操作:

Dim query = (From st In db.students _ 
      Order By st.st_studentid Ascending _ 
      Select st).Skip((CurrentPage - 1) * PageSize).Take(PageSize) 

然後提供CurrentPagePageSize變量作爲自變量的方法。 (您不希望將它們構建到數據訪問中,因爲它們可能會在您網站的不同部分之間發生變化......)

+0

如何確定數據是否已達到最大限制,即我們位於最後一頁? – 2012-09-06 06:59:42