Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


anropa en klass i codebehind

Postades av 2006-12-14 22:20:43 - Sead Travancic, i forum asp.net generellt, Tråden har 8 Kommentarer och lästs av 684 personer

Jag har skapat en klass "ForumClass" i katalogen "App_Code".

Klassen har bl a en funkton med namn "addForum".

Hur gör jag för att sen anropa addForum i codebehind på en av mina aspx??

Jag försöker med följande men får fel-meddelande "declaratin expekted"...

Imports ForumClass
Partial Class Forum_AddForum
Inherits System.Web.UI.Page

Protected Sub addForum(ByVal sender As Object, ByVal e As System.EventArgs) Handles knappLaggTillNyttForum.Click


Dim minKlass As New ForumClass
minKlass.addForum()


End Sub
End Class


Svara

Sv: anropa en klass i codebehind

Postades av 2006-12-14 22:53:40 - Oskar Johansson

Var får du felmeddelande?

Har du deklarerat metoden som publik?


Svara

Sv:anropa en klass i codebehind

Postades av 2006-12-16 00:04:19 - Sead Travancic

ja den är:
Public Sub addForum(.....)

men när jag skriver
Dim minKlass As New ForumClass
minKlass.addForum()

så blir minklass understruken = "declaratin expekted"


Nån som har nån bra länk om hur man jobbar med klasser i MS Visual Studio???




Svara

Sv: anropa en klass i codebehind

Postades av 2006-12-16 15:00:28 - Thomas Karlsson

Hej Sead

Jag vet inte varför du får att minKlass inte är deklarerad, för rent spontant så verkar du har gjort rätt.

Då jag använder mig av klasser vilket jag gör varje gång jag bygger aspx-sidor som har någon form av databaskoppling. Jag skapar en klass, vi döper den till cAccessConnection, som tar hand om OleDb.OleDbConnection, Dataset, OleDb.OleDbDataAdapter, samt den sträng, SqlStr , som jag hämtar min fråga ifrån en annan klass som representerar varje tabell som jag jag har i min DB. Varje gång jag skapar en klass så högerklickar jag på mitt projektnamn i Solution Explorer och väljer Add Class..



Alltså:

cAccessConnection (klass), denna klass ärver jag i varje ny klass som skall vara med i mitt projekt. Säg att jag har en tabell som håller data om billar.

Då skapar jag en klass som vi kallar cCars. I den här klassen ärver jag min connection-klass dvs

Public Class cCars
    Inherits cAccessConn

    Public Sub GetCars()
        SqlStr = "SELECT * " & _
                 "FROM Cars" 
                  
             Fill()

    End Sub
  
End Class


I min Codebehind sedan så kan vi säga att jag vid pageload skall en datagrid laddas med info om mina bilar.

 Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       GetCars()
    End Sub

Private Function GetCars()


Dim objCars As New cCars 'Deklarera ett objekt av klassen cCars

 
 objCars.GetCars() ' Anropa din SQL-fråga i cCars-klassen
        dgDinDatagrid.DataSource = objCars.ds
        dgDinDatagrid.DataBind()
        dgDinDatagrid.Dispose()
 End Function


Inget vidare exempel kanske och jag vet inte om du blev något klokare?? Men i grova drag så är det så här jag gör då jag använder mig av klasser.

// Mvh Thomas


Svara

Sv: anropa en klass i codebehind

Postades av 2006-12-16 15:30:46 - Oskar Johansson

Ligger klassen i något namespace?


Svara

Sv:anropa en klass i codebehind

Postades av 2006-12-18 01:27:48 - Sead Travancic

Jag vill först tacka er men framförallt dig Thomas för att du tog dig tid å svarade så detaljerat på min fråga.

Det jag gjorde för fel var att jag inte hade paranteser efter "ForumClass" dvs

Dim minKlass As New ForumClass() istället för
Dim minKlass As New ForumClass


Jag undrar om du har tid å förklara för mig som nybörjare av asp.net
vilka fördelar man har när man använda klasser?

Som jag ser ditt exempel så skulle jag kunna koda allt det du gör utan att använda mig av klasser och skriva allt i codbehind....

Tack ännu en gång :-)



Svara

Sv: anropa en klass i codebehind

Postades av 2006-12-18 18:04:20 - Thomas Karlsson

Hej igen

Ja se hur enkelt det kan vara ibland...=)

Då ska vi se om jag kan förklara varför man ska/bör använda sig av klasser.

Du skrev att det såg ut som, i mitt exempel, att man lika gärna kunde göra allt i CodeBehind. Men som jag skrev så var kanske inte mitt exempel var det bästa. Hur som helst så skapar man klasser för att ge sig möjligheten att definiera egna objekt i ett projekt - alltså objekt med egenskaper, metoder och händelser.

Jag pratade om min Connection i min tidigare tråd. Där är också en stor fördel att ha kopplingen mot din databas på ett ända ställe iställe för att skapa kopplingar, med dataset, dataadaptrar etc hela tiden i din CodeBehind varje gång du skall göra en fråga mot en databas. Detta kan bli väldigt rörigt då du harkopplingar och frågor överallt i din CodeBehind.

Ska försöka förklara vad jag menar.

Jag skapar en klass som "tar hand om" kopplingen mot databasen.Så här ser det ut i mitt fall:

Public Class cAccessConn

    Private AccessConn As New OleDb.OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & HttpContext.Current.Server.MapPath("./DB/DinDataBas.mdb"))
    Private ads As New DataSet
    Private ada As New OleDb.OleDbDataAdapter
    Private aSqlStr As String


    Protected ReadOnly Property Con() As OleDb.OleDbConnection
        Get
            Return AccessConn
        End Get
    End Property

    Public ReadOnly Property ds() As DataSet
        Get
            Return ads
        End Get
    End Property

    Public Property SqlStr() As String
        Get
            Return aSqlStr
        End Get
        Set(ByVal Value As String)
            aSqlStr = Value
        End Set
    End Property

    Public Sub Dispose()
        AccessConn.Dispose()
        ads.Dispose()
        ada.Dispose()
    End Sub

    Public Sub Fill()
        Dim Command As New OleDb.OleDbCommand
        Command.CommandText = SqlStr
        Command.Connection = AccessConn
        ada.SelectCommand = Command
        AccessConn.Open()
        ada.Fill(ds)
        AccessConn.Close()
    End Sub

    Protected Sub ExecNoQuery(ByVal sp As OleDb.OleDbCommand)
        Try
            AccessConn.Open()
        Catch
        End Try
        sp.ExecuteNonQuery()
        AccessConn.Close()
    End Sub

End Class


Så ser alltså min Connection-klass ut som jag sedan ärver i den klass som jag sedan skapar då jag vill börja ställa frågor mot min databas.

Jag har ett exempel där följande gäller. På min sida för min firma http://www.ewc.se så kan jag logga in för att se om någon har postat ett inlägg in det kontakt-formulär som finns på sidan. När jag har loggat in på min admin så är det en datagrid som presenterar ev. inlägg.

Då jag har en tabell i min databas som heter Meddelanden så skapar jag mig en klass som jag kallar för cMessage i den klassen har jag följande:

Public Class cMessage
    Inherits cAccessConn

    Public Sub GetMessage()
        SqlStr = "SELECT Id,FNamn, ENamn, Foretag, Tel, Meddelande, KortMeddelande, Datum " & _
                 "FROM Meddelanden " 
                
        Fill()

    End Sub
    Public Sub GetMessById(ByVal Id)
        SqlStr = "SELECT  Meddelande " & _
                 "FROM Meddelanden " & _
                 "WHERE Id = " & Id

        Fill()
    End Sub


    Public Sub InsertMessege(ByVal FNamn, ByVal ENamn, ByVal Foretag, ByVal Tel, ByVal Epost, ByVal Meddelnade, ByVal KortMeddelande, ByVal DateNow)
        SqlStr = "INSERT INTO Meddelanden(FNamn, ENamn, Foretag, Tel, Epost, Meddelande, KortMeddelande, Datum) " & _
                 "VALUES('" & FNamn & "', '" & ENamn & "', '" & Foretag & "', '" & Tel & "', '" & Epost & "', '" & Meddelnade & "', '" & KortMeddelande & "', '" & DateNow & "')"


        Dim sp As New OleDb.OleDbCommand(SqlStr, Con)
        ExecNoQuery(sp)

    End Sub


    End Class


Vad frågorna gör är av minder vikt men det jag vill att du ska se/förstå är att jag ärver min Connection-klass och på så vis använda mig av det som är inom den klassen dvs min koppling mot databasen. På detta vis så skapar jag "egenskaper" för min koppling bara 1! gång och sedan anropar jag den då jag ställer en fråga från mina klasser som motsvarar en tabell.

Om vi kikar lite i min klass cMassage så har jag en Sub som heter GetMessage. Denna hämtar ut mina meddelanden från mitt kontakta-formulär.

Koden i CodeBehid blir således enligt följande:

 Private Function GetMessage()
        Dim objMessage As New cMessage 'Här deklarerar jag mitt objekt av klassen cMessage
       
        objMessage.GetMessage() 'Med punktnotation kommer jag åt den Sub som jag har i min klass
        dgMessage.DataSource = GetMessage.ds ' ds kommer jag åt då jag har ärvt cAccessConn i min   cMessage-klass
        dgMessage.DataBind()
        dgMessage.Dispose()

    End Function


GetMessage() läggar jag givetvis under PageLoad.

Hoppas att jag inte har snurrat till dig för dig, men något åt det här hållet blir min förklaring till klasser. Sen kanske någon mer erfaren programmerare med djupgående kunskap om klasser skrattar åt min förklaring men som sagt detta är ett exepel på hur jag går till väga då jag använder klasser. För visst finns det mycket om klasser där man kan ärva basklasser osv men som sagt så här gör jag och jag hoppas på att du fick några uppslag.


// Mvh Thomas K


Svara

Sv:anropa en klass i codebehind

Postades av 2006-12-19 03:40:12 - Sead Travancic

Tack Thomas!

Ditt exempel är bra och jag börjar inse fördelarna med klasser. Speciellt om man ska återanvända koden.

tack ännu en gång...


Svara

Sv: anropa en klass i codebehind

Postades av 2006-12-19 04:01:49 - Thomas Karlsson

=)

// Mvh Thomas


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 170
27 953
271 705
3 896
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies