11. december 2010 - 19:04Der er
1 kommentar og 1 løsning
Paging problem
Hej
Jeg har 5 recorder og har i min pagesize kode sagt at der skal være 2 recorder pr. side, det virker fint den viser bare KUN en side og ikke tre, hvad er problemet
Partial Class _Default Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) If (Not IsPostBack) Then linqdb(10, 0) Else plcPaging.Controls.Clear() CreatePagingControl() End If End Sub
Private Sub linqdb(ByVal take As Integer, ByVal pageSize As Integer)
Using DBconn As New GetProductListDataContext() Dim Q = _ From p In DBconn.GetTable(Of Product)() _ Where p.IsEnabled = "1" _ Order By p.PName Descending _ Select p
Dim page As New PagedDataSource() page.AllowCustomPaging = True page.AllowPaging = True page.DataSource = Q page.PageSize = 2 MyRep.DataSource = page MyRep.DataBind()
Dim lbl As Label = CType(MyRep.Controls(MyRep.Controls.Count - 1).FindControl("PValue"), Label)
If lbl Is Nothing Then lbl.Text = "0" Else lbl.Text = Q.ToList.Count() End If
If (Not IsPostBack) Then RowCount = Q.ToList.Count() CreatePagingControl() End If End Using
Dim nodata As Label = CType(MyRep.Controls(MyRep.Controls.Count - 1).FindControl("NoData"), Label) If nodata Is Nothing Then nodata.Text = "Der findes ingen data der machter din forespørgsel." End If End Sub
Private Sub CreatePagingControl() For i As Integer = 0 To (RowCount / 10) Dim lnk As New LinkButton() AddHandler lnk.Click, AddressOf lbl_Click lnk.ID = "lnkPage" & (i + 1).ToString() lnk.Text = (i + 1).ToString() plcPaging.Controls.Add(lnk) Dim spacer As New Label() spacer.Text = " " plcPaging.Controls.Add(spacer) Next i End Sub
Private Sub lbl_Click(ByVal sender As Object, ByVal e As EventArgs) Dim lnk As LinkButton = TryCast(sender, LinkButton) Dim currentPage As Integer = Integer.Parse(lnk.Text) Dim take As Integer = currentPage * 10 Dim skip As Integer = If(currentPage = 1, 0, take - 10) linqdb(take, skip) End Sub
Private Property RowCount() As Integer Get Return CInt(ViewState("RowCount")) End Get Set(ByVal value As Integer) ViewState("RowCount") = value End Set End Property
Har næsten løst det, men får denne fejl ang. min ...New Product = p.... Fejlen er "Range variable name can be inferred only from a simple or qualified name with no arguments."
Min code er Imports System.Data Imports System.Data.SqlClient Imports System.Data.Linq.Mapping
Partial Class _Default Inherits System.Web.UI.Page
Dim PageItemSize As Integer = 2 Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) If (Not IsPostBack) Then linqdb(10, 0) Else plcPaging.Controls.Clear() CreatePagingControl() End If End Sub
Private Sub linqdb(ByVal take As Integer, ByVal pageSize As Integer)
Using DBconn As New GetProductListDataContext() Dim Q = From p In DBconn.GetTable(Of Product).Take(take).Skip(pageSize) _ Where p.IsEnabled = "1" _ Order By p.PName Descending _ Select New Product = p, Count = DBconn.GetTable(Of Product).Count()
Dim page As New PagedDataSource() page.AllowCustomPaging = True page.AllowPaging = True page.DataSource = Q page.PageSize = PageItemSize MyRep.DataSource = page MyRep.DataBind()
If MyRep.Controls.Count > 0 Then Dim lbl As Label = CType(MyRep.Controls(MyRep.Controls.Count - 1).FindControl("PValue"), Label) If lbl Is Nothing Then Throw New Exception("") End If lbl.Text = Q.ToList.Count() Else Dim nodata As Label = CType(MyRep.Controls(MyRep.Controls.Count - 1).FindControl("NoData"), Label) nodata.Text = "Der findes ingen data der machter din forespørgsel." End If
If (Not IsPostBack) Then RowCount = Q.ToList.Count() CreatePagingControl() End If End Using End Sub
Private Sub CreatePagingControl() For i As Integer = 0 To (RowCount / PageItemSize) Dim lnk As New LinkButton() AddHandler lnk.Click, AddressOf lbl_Click lnk.ID = "lnkPage" & (i + 1).ToString() lnk.Text = (i + 1).ToString() plcPaging.Controls.Add(lnk) Dim spacer As New Label() spacer.Text = " " plcPaging.Controls.Add(spacer) Next i End Sub
Private Sub lbl_Click(ByVal sender As Object, ByVal e As EventArgs) Dim lnk As LinkButton = TryCast(sender, LinkButton) Dim currentPage As Integer = Integer.Parse(lnk.Text) Dim take As Integer = currentPage * PageItemSize Dim skip As Integer = If(currentPage = 1, 0, take - PageItemSize) linqdb(take, skip) End Sub
Private Property RowCount() As Integer Get Return CInt(ViewState("RowCount")) End Get Set(ByVal value As Integer) ViewState("RowCount") = value End Set End Property
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.