11. december 2010 - 19:04
Der 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
Code
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.Linq.Mapping
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
End Class
12. december 2010 - 00:09
#1
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
End Class