Avatar billede tknudsen Nybegynder
26. november 2002 - 21:03 Der er 1 kommentar og
1 løsning

event i custom control

Jeg er ved at lave en custom control, som udvider datagrid-klassen. Årsagen er, at jeg vil lave et grid, hvor der er et søgefelt pr kollone. Dvs at man skal udfylde søgekriterier og derefter trykke på en søg-knap. Det er denne søg-knap jeg har problemer med da selve søge-metoden gerne skal være inde i kontrollen.

Jeg laver søg-knapen via en html-submit-kontrol i render() metoden:

output.Write("<input type=""submit"" value=""SØG"" runat=""server"" />")

Derudover implementerer klassen IPostBackDataHandler-interfacet, for at fange formens data, men det ser ud til at IPostBackDataHandler.LoadPostDate(...) ikke bliver kaldt. Hvad gør jeg galt ?
Avatar billede tknudsen Nybegynder
26. november 2002 - 21:06 #1
Her er min test-klasse:

    Public Class SearchGrid
        Inherits System.Web.UI.WebControls.DataGrid
        Implements IPostBackDataHandler

        Private _Time As String

        Public Event Search(ByVal Obj As Object, ByVal e As EventArgs)

        Protected Sub OnSearch(ByVal e As EventArgs)
            RaiseEvent Search(Me, e)
        End Sub

        Public Sub New()
            MyBase.New()
        End Sub

        Public Function LoadPostData(ByVal PostDataKey As String, ByVal Values As NameValueCollection) As Boolean Implements IPostBackDataHandler.LoadPostData
            _Time = Now.ToShortTimeString()

            Return True
        End Function

        Public Sub RaisePostDataChangedEvent() Implements IPostBackDataHandler.RaisePostDataChangedEvent
            OnSearch(EventArgs.Empty)
        End Sub

        Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)
            output.Write(_Time)
            output.Write("<input type=""text"" name=""search1"" id=""search1"" runat=""server"" />")
            output.Write("<input type=""submit"" value=""OK"" runat=""server"" />")
            MyBase.Render(output)
        End Sub

    End Class
Avatar billede tknudsen Nybegynder
26. november 2002 - 22:09 #2
Jeg tager lige hovedet ud af in røv og prøver igen... :-)

Jeg har nu lavet en test-klasse der virker:

    Public Class SearchGrid
        Inherits System.Web.UI.WebControls.DataGrid

        Private _strSQL As String

        Public Sub New()
            MyBase.New()
        End Sub

        Public Property SQL() As String
            Get
                Return _strSQL
            End Get
            Set(ByVal Value As String)
                _strSQL = Value
            End Set
        End Property

        Public Sub ExecSQL()
            Dim objDB As New Database()
            Dim objSQL As New SQLAdapterQuery(Me.SQL)
            Dim objReader As OleDbDataAdapter
            objReader = objDB.ExecSQL(objSQL)
            Dim objDS As New DataSet()
            objReader.Fill(objDS)

            Me.DataSource = objDS.Tables(0)
            Me.DataBind()
        End Sub

        Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)
            Dim objColumn As DataGridColumn
            Dim strTitles As String = ""
            Dim strFields As String = ""
            Dim strCtrlId As String
            Dim strPostbackValue As String
            Dim strWhere As String = ""

            For Each objColumn In Me.Columns
                strCtrlId = Me.ID & "_search_" & objColumn.HeaderText
                If Me.Page.IsPostBack Then
                    strPostbackValue = Me.Page.Request.Form(strCtrlId)
                Else
                    strPostbackValue = ""
                End If
                strTitles &= "<td>" & objColumn.HeaderText & "</td>"
                strFields &= "<td><input type=""text"" name=""" & strCtrlId & """ id=""" & strCtrlId & """ value=""" & strPostbackValue & """ /></td>"

                If Trim(strPostbackValue) <> "" Then
                    If strWhere <> "" Then  ' AND
                        strWhere &= " AND " & objColumn.HeaderText & " LIKE '%" & strPostbackValue & "%'"
                    Else
                        strWhere = " WHERE " & objColumn.HeaderText & " LIKE '%" & strPostbackValue & "%'"
                    End If
                End If
            Next
            output.Write("<table><tr>")
            output.Write(strTitles & "</tr><tr>")
            output.Write(strFields)
            output.Write("<td><input type=""submit"" value=""OK"" runat=""server"" /></td></tr></table>")

            Me.SQL &= strWhere
            output.Write(Me.SQL)

            Me.ExecSQL()

            MyBase.Render(output)
        End Sub

    End Class

... der er sføli en række uhænsigtsmæssigheder... men det er detaljer... den her funger :-)
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