03. februar 2005 - 18:38Der er
15 kommentarer og 1 løsning
Refresh problem
Jeg har lavet en billede datagrid med (hjemmelavet) paging, men når jeg trykker på f.eks. side 4 (onclick Sub PagerButtonClick), så fungerer refresh af datagrid'en fint, men hvis jeg derefter trykker på side 7, så refresher datagrid'en ikke før der er trykket to gange på side 7. Hvorfor det ?
Hej curriculum... Jeg synes ikke problemstillingen er helt klar. Skal det forstås på den måde, at dit første klik altid går godt - og at de næste klik altid kræver et ekstra roundtrip ? mvh
Ja du har forstået problemet korrekt. De næste klik må klikkes to gange før der sker noget med datagrid'en. Mit bud er at der bliver lavet linkbuttons til hver side, der placeres i en placeholder, og hvis jeg kigger efter statusbarren, så skifter data'ene ikke til det rigtige før der er klikket en gange (also på næste klik)... Håber du forstår problemet... jeg kan også poste koden, hvis du ønsker det.
hej igen :o) jep - jeg vil gerne se den kode du har i spil i forbindelse med din paging, og også meget gerne din page_load - eller hvor du nu laver din initialbinding. mvh
Public Class Gallery Inherits System.Web.UI.Page Protected WithEvents dgImages As System.Web.UI.WebControls.DataGrid Protected WithEvents lblCount As System.Web.UI.WebControls.Label Protected WithEvents lblPageSize As System.Web.UI.WebControls.Label Protected WithEvents lblImage As System.Web.UI.WebControls.Label Protected WithEvents txtSearchText As System.Web.UI.WebControls.TextBox Protected WithEvents ddPiDbCategory As System.Web.UI.WebControls.DropDownList Protected WithEvents btnSubmit As System.Web.UI.WebControls.Button Protected WithEvents ddUsDbMainIdNo As System.Web.UI.WebControls.DropDownList Protected WithEvents phButtons As System.Web.UI.WebControls.PlaceHolder Protected WithEvents ibFirst As System.Web.UI.WebControls.ImageButton Protected WithEvents ibLast As System.Web.UI.WebControls.ImageButton Protected WithEvents lblSearchText As System.Web.UI.WebControls.Label
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init 'CODEGEN: This method call is required by the Web Form Designer 'Do not modify it using the code editor. InitializeComponent() End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Put user code to initialize the page here
If Not IsPostBack Then lblSearchText.Text = "Leiti úrslit fyri " & Chr(96) & Request.QueryString("searchtext") & Chr(96) lblSearchText.Font.Bold = True lblSearchText.Font.Size = FontUnit.Point(10)
Dim cmd As String = Request.QueryString("cmd") Dim searchtext As String = Request.QueryString("searchtext") If searchtext = "" Then searchtext = "*"
Dim searchindex As String = Request.QueryString("searchindex") If searchindex = "" Then searchindex = "*"
Dim searchindexText As String = Request.QueryString("searchindexText") If searchindexText = "" Then searchindexText = "*"
Dim Parent As String = Request.QueryString("parent") If Parent = "" Then Parent = "*"
Dim PiDbCategory As String = Request.QueryString("PiDbCategory") If PiDbCategory = "" Then PiDbCategory = "All"
Dim UsDbMainIdNo As String = Request.QueryString("UsDbMainIdNo") If UsDbMainIdNo = "" Then UsDbMainIdNo = "All"
Dim curpage As String = Request.QueryString("Curpage") If curpage = "" Then curpage = "1" End If End Sub
Sub BindImages() phButtons.Controls.Clear()
Dim MyConnection As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("Conn")) Dim MyCommand As SqlDataAdapter
Dim sqlStr As String = "SELECT * From PiDb WHERE (PiDbPictureType <> '')" Dim RcdCount As Integer
Dim aPicture As DataTable Dim pics As DataRow
Dim sTable As DataTable = New DataTable("Images") Dim Row As DataRow
aPicture = GetRecordsetArray(sqlStr) If aPicture.Rows.Count <> 0 Then Dim Image1 As DataColumn = New DataColumn("Image1") Image1.DataType = System.Type.GetType("System.String") sTable.Columns.Add(Image1)
Dim Image2 As DataColumn = New DataColumn("Image2") Image2.DataType = System.Type.GetType("System.String") sTable.Columns.Add(Image2)
Dim Image3 As DataColumn = New DataColumn("Image3") Image3.DataType = System.Type.GetType("System.String") sTable.Columns.Add(Image3)
Dim Image4 As DataColumn = New DataColumn("Image4") Image4.DataType = System.Type.GetType("System.String") sTable.Columns.Add(Image4)
Dim i As Integer = 1
Dim aId(3) As String Dim aSender(3) As String Dim aDate(3) As String
For Each pics In aPicture.Rows Select Case i Case 1 aId(0) = Convert.ToString(pics(0)) aSender(0) = Convert.ToString(pics(8)) aDate(0) = Convert.ToDateTime(pics(1)).ToShortDateString Case 2 aId(1) = Convert.ToString(pics(0)) aSender(1) = Convert.ToString(pics(8)) aDate(1) = Convert.ToDateTime(pics(1)).ToShortDateString Case 3 aId(2) = Convert.ToString(pics(0)) aSender(2) = Convert.ToString(pics(8)) aDate(2) = Convert.ToDateTime(pics(1)).ToShortDateString Case 4 aId(3) = Convert.ToString(pics(0)) aSender(3) = Convert.ToString(pics(8)) aDate(3) = Convert.ToDateTime(pics(1)).ToShortDateString
Dim j As Integer For j = 0 To (dgImages.PageCount - 1) Dim lbPage As New LinkButton() lbPage.CommandArgument = j lbPage.CausesValidation = False lbPage.Font.Bold = False
If j = dgImages.CurrentPageIndex Then lbPage.Font.Bold = True lbPage.Text = "(" & (j + 1) & ")" Else lbPage.Text = " " & Convert.ToString(j + 1) & " " End If
phButtons.Controls.Add(lbPage) phButtons.DataBind() lbPage.Dispose() Next End Sub
Sub PagerButtonClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim arg As Integer = sender.CommandArgument
dgImages.CurrentPageIndex = arg
BindImages() End Sub
Sub PagerImageClick(ByVal sender As System.Object, ByVal e As System.Web.UI.ImageClickEventArgs) Dim arg As String = sender.CommandArgument
Select Case arg Case "first" dgImages.CurrentPageIndex = 0 Case "last" dgImages.CurrentPageIndex = dgImages.PageCount End Select
BindImages() End Sub
Private Function ShowImage(ByVal aId As String, ByVal aPics As String, ByVal aDate As String) As String ShowImage = "<td width=""25%"">" _ & "<table border=""0"">" _ & "<tr>" _ & "<td height=""70"" valign=""middle"" align=""center"" style=""border: 1 solid #C0C0C0"">" _ & "<a href=""showpicture.aspx?PiDBMainIdNo=" & aId & "&searchtext=*&searchindex=*&searchindexText=*&parent=*&PiDbCategory=All&Indexno=1&curpage=1&NumOfRecs=95&PiDBOwnerId=32&UsDbMainIdNo=All"">" _ & "<img src=""images/70_70_" & aId & ".jpg"" alt="""" name=""mainpic"" align=""center"" align=""absmiddle"" border=""0""></a>" _ & "</tr>" _ & "<tr>" _ & "<td>" _ & "Sendari: " & aPics & "<br>" _ & "Lagt afturat: " & aDate _ & "</td>" _ & "</tr>" _ & "</table>" _ & "</td>" End Function
'******************** Database functions ********************** Public Function GetRecordsetArray(ByVal sSQL As String) As DataTable Dim Connection As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("Conn")) Dim adapter As SqlDataAdapter = New SqlDataAdapter() Dim dt As DataTable = New DataTable()
Try adapter.SelectCommand = New SqlCommand(sSQL, Connection) adapter.Fill(dt) Return dt Catch sqlEx As SqlException Response.Write(sqlEx.ToString) Catch Ex As Exception Response.Write(Ex.ToString) Finally Connection.Close() Connection.Dispose() End Try End Function
Public Sub ExeQuery(ByVal sSQL As String) Dim Connection As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("Conn")) Dim Command As SqlCommand = New SqlCommand(sSQL, Connection)
Try Connection.Open() Command.ExecuteNonQuery() Catch ex As Exception Response.Write(ex.ToString) Finally Connection.Close() Connection.Dispose() End Try End Sub
Private Sub btnSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubmit.Click
Sorry det var nok unødigt at paste hele koden... Hvis der er forskellige mærkelige kodestumper f.eks nogle med pling foran osv.. så overser du dem bare..
Nej den har jeg ikke checket endnu.. vil prøve med en reponse.write i morgen
det er så dit trace du har skrevet ud går jeg ud fra.... det jeg mente med debugging var, om du overhovedet fik din eventhandler PagerButtonClick hver gang - eller kun hver anden, og det ville du kunne se hvis du satte et breakpoint i handleren og debuggede.
hvilket udviklingsmiljø bruger du ?
hvis du ikke har mulighed for at debugge - kan du bare lave en response.write inde fra handleren, eller alternativt en Trace.Write(...), hvis du alligevel benytter den. Så kan du f.eks. lave sådan en her
Dim traceMessage As String = String.Format("{0}[{1}]", sender.ID, arg) Trace.Write("PagingEvent", traceMessage)
Det skulle kunne give dig den nødvendige info i tracet.
Jeg kunne godt forestille mig at din handler ikke bliver kaldt hver gang.
det er ellers en forrygende debugger .... den skulle du tage at bruge noget mere. når du debugger kan du se indholdet i diverse variable - følge dit programflow ned igennem, og endog sætte værdier og arbejde videre med dem.... meget effektivt til fejlfinding.
din opbygning af funktionaliteten er en lille smule speciel, men jeg tror du kan lave en hurtig løsning hvis du sørger for at give din linkbuttons id'er selv, istedet for at lade dem blive autogenereret. f.eks.: bPage.ID = String.Format("SUBPAGER{0}", j) (og så lige sikre dig at den metode der tilknytter handleren kaldes hver gang).
Ja det er noget trist noget når tingene ikke spiller som forventet. god fornøjelse med dit videre arbejde. mvh
Synes godt om
Ny brugerNybegynder
Din løsning...
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.