2009-04-18 17 views
5

Estoy creando una página que utiliza el acceso a datos de Linqfor y estoy usando DataList para mostrar datos. ¿Cómo puedo usar Linq para hacer paginación de datos? Lea el código simple a continuación:Paginación Datalist con linq

Normalmente uso un PagedDatasource pero esto solo parece funcionar con una DataTable.

Aquí es mi LINQ para volver Datatable que está vinculado a Datalist que:

Pública GetStudentList Shared Function() Como DataTable

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 

En el código subyacente de la página:

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 

Respuesta

8

Encontrará los métodos .Skip() and .Take() muy útiles.

Me di cuenta de que proporcionó un código de su proyecto, así que aquí hay una actualización sobre cómo debe implementar estos métodos.

En el método para obtener los datos, haga lo siguiente:

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

a continuación, proporcionar las variables CurrentPage y PageSize como argumentos para el método. (No desea compilarlos en el acceso a los datos, ya que podrían variar en diferentes partes de su sitio ...)

+0

¿Cómo identificar si los datos han alcanzado su límite máximo, es decir, estamos en la última página? –

+0

Trabajó a través de algunas combinaciones. Ahora está funcionando para mí. Gracias por tu respuesta :) –