Avatar billede curriculum Nybegynder
03. februar 2005 - 18:38 Der 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 ?
Avatar billede snepnet Nybegynder
03. februar 2005 - 19:52 #1
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
Avatar billede curriculum Nybegynder
03. februar 2005 - 20:28 #2
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.
Avatar billede snepnet Nybegynder
03. februar 2005 - 20:29 #3
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
Avatar billede curriculum Nybegynder
03. februar 2005 - 20:34 #4
Min vb fil...

Imports System.Data
Imports System.Data.SqlClient
Imports System.Drawing
Imports System.Net
Imports System.IO

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

        'Cache.Remove("dgImages")
        'Cache.Remove("ibFirst")
        'Cache.Remove("ibLast")
        'Cache.Remove("phButtons")
        BindImages()

        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

                        Row = sTable.NewRow()
                        Row.Item("Image1") = ShowImage(aId(0), aSender(0), aDate(0))
                        Row.Item("Image2") = ShowImage(aId(1), aSender(1), aDate(1))
                        Row.Item("Image3") = ShowImage(aId(2), aSender(2), aDate(2))
                        Row.Item("Image4") = ShowImage(aId(3), aSender(3), aDate(3))
                        sTable.Rows.Add(Row)
                        Row = Nothing

                        aId(0) = ""
                        aId(1) = ""
                        aId(2) = ""
                        aId(3) = ""
                        aSender(0) = ""
                        aSender(1) = ""
                        aSender(2) = ""
                        aSender(3) = ""
                        aDate(0) = ""
                        aDate(1) = ""
                        aDate(2) = ""
                        aDate(3) = ""

                        i = 0
                        dgImages.SelectedIndex = 4
                End Select
                i += 1
            Next
        End If

        Dim DS As DataSet
        DS = New DataSet()
        DS.Tables.Add(sTable)
        MyCommand = New SqlDataAdapter(sqlStr, MyConnection)

        RcdCount = DS.Tables("Images").Rows.Count.ToString()
        dgImages.PageSize = 3

        If Not Page.IsPostBack Then
            dgImages.CurrentPageIndex = 0
        End If

        Try
            dgImages.DataSource = DS
            dgImages.DataBind()
        Catch e As Exception
            dgImages.CurrentPageIndex = 0
        End Try

        lblCount.Text = aPicture.Rows.Count & " myndir funnar á " & dgImages.PageCount & " síðum."
        lblPageSize.Text = "Vísir" & (dgImages.PageSize * 4) & " myndir á hvørji síðu"

        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

            AddHandler lbPage.Click, AddressOf PagerButtonClick

            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

    End Sub
End Class
Avatar billede snepnet Nybegynder
03. februar 2005 - 21:40 #5
halløj igen... det var jo da en hel del kode du kom med der :o)

har du checket om din PagerButtonClick bliver kaldt hver gang - eller kun hver anden ?

mvh
(du bygger temmelig meget op i koden selv.... er der noget af det den indbyggede funktionalitet du synes er noget crap ?)
Avatar billede curriculum Nybegynder
04. februar 2005 - 00:54 #6
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
Avatar billede snepnet Nybegynder
04. februar 2005 - 00:56 #7
har du ikke mulighed for at debugge ?
mvh
Avatar billede curriculum Nybegynder
04. februar 2005 - 09:38 #8
Jo, her er relevant debug tekst:

Ved loading
      phButtons System.Web.UI.WebControls.PlaceHolder 450 0
            _ctl0 System.Web.UI.WebControls.LinkButton 79 0
            _ctl1 System.Web.UI.WebControls.LinkButton 53 0
            _ctl2 System.Web.UI.WebControls.LinkButton 53 0
            _ctl3 System.Web.UI.WebControls.LinkButton 53 0
            _ctl4 System.Web.UI.WebControls.LinkButton 53 0
            _ctl5 System.Web.UI.WebControls.LinkButton 53 0
            _ctl6 System.Web.UI.WebControls.LinkButton 53 0
            _ctl7 System.Web.UI.WebControls.LinkButton 53 0

Første klik (aktiverer side 5 af 8) er alt okey
      phButtons System.Web.UI.WebControls.PlaceHolder 450 0
            _ctl0 System.Web.UI.WebControls.LinkButton 79 0
            _ctl1 System.Web.UI.WebControls.LinkButton 53 0
            _ctl2 System.Web.UI.WebControls.LinkButton 53 0
            _ctl3 System.Web.UI.WebControls.LinkButton 53 0
            _ctl4 System.Web.UI.WebControls.LinkButton 53 0
            _ctl5 System.Web.UI.WebControls.LinkButton 53 0
            _ctl6 System.Web.UI.WebControls.LinkButton 53 0
            _ctl7 System.Web.UI.WebControls.LinkButton 53 0

Næste klik (skal aktivere side 7 af 8) men den skifter ikke side
      phButtons System.Web.UI.WebControls.PlaceHolder 450 0
            _ctl0 System.Web.UI.WebControls.LinkButton 53 0
            _ctl1 System.Web.UI.WebControls.LinkButton 53 0
            _ctl2 System.Web.UI.WebControls.LinkButton 53 0
            _ctl3 System.Web.UI.WebControls.LinkButton 53 0
            _ctl4 System.Web.UI.WebControls.LinkButton 79 0
            _ctl5 System.Web.UI.WebControls.LinkButton 53 0
            _ctl6 System.Web.UI.WebControls.LinkButton 53 0
            _ctl7 System.Web.UI.WebControls.LinkButton 53 0

Tredje klik (aktiverer side 7 af 8) nu skifter den til side 8
      phButtons System.Web.UI.WebControls.PlaceHolder 456 0
            _ctl8 System.Web.UI.WebControls.LinkButton 53 0
            _ctl9 System.Web.UI.WebControls.LinkButton 53 0
            _ctl10 System.Web.UI.WebControls.LinkButton 54 0
            _ctl11 System.Web.UI.WebControls.LinkButton 54 0
            _ctl12 System.Web.UI.WebControls.LinkButton 54 0
            _ctl13 System.Web.UI.WebControls.LinkButton 54 0
            _ctl14 System.Web.UI.WebControls.LinkButton 80 0
            _ctl15 System.Web.UI.WebControls.LinkButton 54 0
Avatar billede curriculum Nybegynder
04. februar 2005 - 09:50 #9
Tredje klik (aktiverer side 7 af 8) nu skifter den til side 7... selvfølgeligt..
Avatar billede snepnet Nybegynder
04. februar 2005 - 10:24 #10
hej igen curriculum :o)

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.

mvh
Avatar billede curriculum Nybegynder
04. februar 2005 - 10:45 #11
Jeg har aldrig brugt mine debug funktioner andre end trace i min VS .Net
Mine eventhandlere bliver ikke kaldt hver gang, det er der problemet er.
Avatar billede snepnet Nybegynder
04. februar 2005 - 10:57 #12
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).

mvh
Avatar billede curriculum Nybegynder
04. februar 2005 - 11:13 #13
Hold da op snepnet.. den fungerer da...
Send mig et svar
Avatar billede snepnet Nybegynder
04. februar 2005 - 11:15 #14
et svar skal du få :o)
mvh
/snep
Avatar billede curriculum Nybegynder
04. februar 2005 - 11:17 #15
Tak det var dejligt at komme over den forhindring :))
Avatar billede snepnet Nybegynder
04. februar 2005 - 11:19 #16
Ja det er noget trist noget når tingene ikke spiller som forventet. god fornøjelse med dit videre arbejde.
mvh
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester