Avatar billede kak Nybegynder
19. marts 2008 - 15:31 Der er 9 kommentarer og
1 løsning

Bruge page-elements i en klasse

Jeg vil gerne lave en funktion, der kan kaldes fra flere sider.
Jeg har derfor lavet en myClass.vb fil, og jeg kan også godt kalde de subs/funktioner der ligger i den.

Men i en af funktionerne, har jeg brug for, at den henter data fra et GridView på siden. Problemet er, at jeg åbenbart ikke kan referere til elementerne på siden, inde i en class.vb fil.

Jeg er godt klar over, at da den jo kan kaldes fra flere sider, er det ikke sikkert, at de samme elementer er på siderne. Men det tager jeg selvfølgelig højde for, derfra hvor jeg kalder funktionen.

Kan det ikke lade sig gøre, at bruge disse elementer, eller er der en anden løsning på problemet?
Avatar billede torotune Nybegynder
19. marts 2008 - 17:54 #1
Hvordan ser den ud, den funktion der bruges til dit GridView?
Avatar billede kak Nybegynder
19. marts 2008 - 18:30 #2
Jeg har ikke lavet den endnu, da jeg ret hurtigt stødte på problemet. Men jeg forsøger at kalde et gridview, der hedder "gridview1".

Jeg udvikler i Visual Web Developer, og allerede der kan jeg se, at den ikke kan genkender gridview1. Det giver også fejl, når jeg førsøger at køre siden.
Avatar billede karsten_larsen Praktikant
20. marts 2008 - 10:33 #3
Kør gennem dataset til GW med de funktioner, som du ønsker at bruge fra class og databind dernæst til GW

:-) karsten_larsen
Avatar billede kak Nybegynder
20. marts 2008 - 10:50 #4
Jeg er bange for, at du tabte mig der :-) Jeg forstår ikke helt hvad du mener?!
Avatar billede karsten_larsen Praktikant
20. marts 2008 - 11:28 #5
Ved hvilken event skal myClass kaldes?
Avatar billede kak Nybegynder
20. marts 2008 - 12:31 #6
Jeg har f.eks. en .aspx side med et gridview og en knap. Ved klik på knappen skal myClass kaldes.

Jeg er blevet nødt til at lade knappen kalde en sub i min codebehind side, og så lade den sub kalde myClass. Subs i myClass kan ikke kaldes direkte fra .aspx siden (så fejler den ved at den ikke kan finde sub'en).
Avatar billede torotune Nybegynder
20. marts 2008 - 16:22 #7
Du gør sådan her:

Du må af en eller anden grund ikke kalde din klasse myClass og bruge den som identifier, så jeg har kaldt den testClass i stedet og smidt den i mappen AppCode.
Hvis du bruger SQLServer så skal du skifte til System.Data.Sql i stedet for OleDB,
som her i eksemplet hvor det er en Access.

TestClass.vb (husk at rette ConnectionString til den du har konf. i web.config)

Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.OleDb

Public Class testClass
    Function GetData(ByVal queryString As String) As DataSet
        Dim connectionString As String = ConfigurationManager.ConnectionStrings("DinConnectionString").ConnectionString
        Dim ds As New DataSet()
        Try
            Dim connection As New OleDbConnection(connectionString)
            Dim adapter As New OleDbDataAdapter(queryString, connection)
            adapter.Fill(ds)
        Catch ex As Exception
            HttpContext.Current.Response.Write(ex.ToString())
            ' Lav noget fejl-lir her
        End Try
        Return ds
    End Function
End Class

Så en aspx-side der hedder test.aspx:

Her placerer du et GridView og kalder det GridView1

I denne sides codebehind, test.aspx.vb kalder du funktionen
der er defineret i testClass, og binder til dit GridView1 som
nævnt:

Imports System.Data

Partial Class test
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            'Instantier din testClass her
            Dim t As New testClass

            Dim queryString As String = _
              "SELECT * FROM DinTabel"

            'Smid din sql-streng ind i din function i testClass
            'og Bind til det gridview du har på siden.
            Dim ds As DataSet = t.GetData(queryString)
            If (ds.Tables.Count > 0) Then
                GridView1.DataSource = ds
                GridView1.DataBind()
            Else
                Response.Write("Kan ikke connecte til db")
            End If
        End If
    End Sub
End Class

Så skulle det virke =)
Avatar billede torotune Nybegynder
20. marts 2008 - 16:39 #8
Alternativt skal du smide GridView1 med ind i funktionen i testClass og binde den derinde fra, som du jo egentlig forespørger:

testClass.vb:

Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.OleDb

Public Class testClass
    Public Function GetData(ByVal queryString As String, ByVal g As GridView) As DataSet
        Dim connectionString As String = ConfigurationManager.ConnectionStrings("DinConnectionString").ConnectionString
        Dim ds As New DataSet()
        Try
            Dim connection As New OleDbConnection(connectionString)
            Dim adapter As New OleDbDataAdapter(queryString, connection)
            adapter.Fill(ds)

            g.DataSource = ds
            g.DataBind()

        Catch ex As Exception
            HttpContext.Current.Response.Write(ex.ToString())
            ' Lav noget fejl-lir her
        End Try
        Return ds
    End Function
End Class

Og din codebehind test.aspx.vb:

Imports System.Data
Imports testClass

Partial Class test
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            Dim t As New testClass
            Dim queryString As String = _
              "SELECT * FROM DinTabel"
            Dim ds As DataSet = t.GetData(queryString, GridView1)
        End If
    End Sub
End Class

Herved skal du jo skrive mindre kode når du skal kalde funktionen, men så kan du kun bruge klassen til at binde GridViews, hvilket gør den mindre fleksibel... Jeg hælder mest til første løsning.
Avatar billede kak Nybegynder
21. marts 2008 - 10:41 #9
Perfekt, torotune! Det sidste forslag passer til mit formål, så nu kan jeg få fat på mit gridview. Tak for hjælpen, og opretter du et svar?!
Avatar billede torotune Nybegynder
22. marts 2008 - 10:41 #10
Det var så lidt, og godt det virker!

Men ja, så skal du smide GridView1 med ind som parameter, men så er funktionen også låst til kun at kunne behandle GridViews. - Det kunne jo være du skulle bruge nogle af de andre datakontroller. Men så kan du selvfølgelig bare have begge funktioner i din klasse. Up 2 u =)
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