Avatar billede tknudsen Nybegynder
01. december 2002 - 18:23 Der er 33 kommentarer og
1 løsning

codebehind events

Hvordan kan jeg fra en ButtonColumn i et DataGrid kalde en funktion i formens codebehind (base klassen) ?

Jeg førsøger noget i denne stil:

list.aspx:

<%@ Page Language="VB" codebehind="list.aspx.vb" Inherits="ListPage" autoeventwireup="false" %>

<form runat="server">
  <asp:label id="lblTest" runat="server" />
  <asp:datagrid ... onitemcommand="TypeCommand">
    <columns>
    ...
    <asp:buttoncolumn text="edit"  commandname="edit" />
    </columns>
  </asp:datagrid>
</form>


list.aspx.vb:

Public Class ListPage
    Inherits Page

Public Sub TypeCommand(sender As Object, e As DataGridCommandEventArgs)
  lblTest.Text = "test"

End Sub

End Class


... men der bliver ikke skrevet i lblTest, så jeg går ud fra at der sker en fejl !?
Avatar billede tknudsen Nybegynder
01. december 2002 - 18:28 #1
Ovenstående er et eksempel. Det faktiske kode ikluderer en del forskellige klasser. Jeg har forsøgt at sætte AutoEventWireup=True. Dette gør at grid'et bliver fyldt ud to gange !? Så derfor forsøger jeg nu med AutoEventWireup=False.

Ideen er fra vs.net, som gør sådan pr default. Jeg har prøvet samme kode i vs.net, og her virker det, men siden det er besluttet IKKE at bruge vs.net hjælper det ikke andet end at bekræftige at koden virker (!). Det er noget med at vs.net selv strikker noget kode sammen, som sørger for at binde codebehind-event-metoder (delegates ?) sammem med de relevante events !?!
Avatar billede burningice Nybegynder
01. december 2002 - 18:31 #2
husk at definere at du har en label i din codebehind fil

Public Class ListPage
    Inherits Page

protected WebControls.Label lblTest

Public Sub TypeCommand(sender As Object, e As DataGridCommandEventArgs)
  lblTest.Text = "test"

End Sub

End Class
Avatar billede tknudsen Nybegynder
01. december 2002 - 18:50 #3
ja... den er jeg med på... jeg får ingen kompilerings el runtime fejl... der sker bare ikke andet end at formen bliver submittet - der bliver ikke skrevet "test" i labelen, hvorfor jeg konkludere at metoden ikke bliver kaldt !?
Avatar billede burningice Nybegynder
01. december 2002 - 18:59 #4
prøv at fjern eventwireup helt... har selv haft mange problemer med den :(

og husk at importer din ListPage-klasse i et namespace

namespace bla

Public Class ListPage
    Inherits Page

protected WebControls.Label lblTest

Public Sub TypeCommand(sender As Object, e As DataGridCommandEventArgs)
  lblTest.Text = "test"

End Sub

End Class

end namespace


<%@ Page Language="VB" codebehind="list.aspx.vb" Inherits="blaListPage" %>
Avatar billede tknudsen Nybegynder
01. december 2002 - 19:00 #5
hvis jeg fjerner AutoEventFireup atributen, bliver detagrid'et udfyldt 2 gange - dvs kolonnerne kommer 2 gange... og efterfølgende giver den TypeCommand() metode en fejl
Avatar billede tknudsen Nybegynder
01. december 2002 - 19:05 #6
... og det her nok noget at gøre med at det er et udvidet datagrid jeg bruger - altså en klasse, som arver fra datagrid. Dette objekts databind bliver kaldt ved Page_Load() eventen, så hvis jeg kan undgå at databind bliver kaldt 2 gange er problemet "løst".
Avatar billede burningice Nybegynder
01. december 2002 - 19:14 #7
grunden til at man sætter autoeventwireup til false, er hvis man ikke automatisk vil have udført Page_Load og Page_Init procedurerne, så det er nok derfor det virker som det skal når du har sat den til false

men har du prøvet at lave et namespace din klasse ligger i og sørger for at bruge denne @page linje

<%@ Page Language="VB" codebehind="list.aspx.vb" Inherits="DitNameSpace.ListPage" autoeventwireup="false" %>
Avatar billede tknudsen Nybegynder
01. december 2002 - 19:24 #8
det giver det samme - ingen ny tekst i lblTest
Avatar billede tknudsen Nybegynder
01. december 2002 - 19:26 #9
mht Page_Init og Page_Load har jeg "delegeret" dem med "Handles" keywordet.
Avatar billede burningice Nybegynder
01. december 2002 - 19:29 #10
netop...

med autoeventwireup="false" kan man selv vælge navnet på den procedure på skal bruges til Page_Load... det kan man ikke når den er sat til true

ang. din side der ikke virker, det forstår jeg virkelig ikke... jeg kan lige kode et eksemel til dig, med codebehind som virker...
Avatar billede tknudsen Nybegynder
01. december 2002 - 19:33 #11
det ville være fedt :-)
Avatar billede burningice Nybegynder
01. december 2002 - 19:46 #12
http://www.burningice.dk/eksperten.dk/289844/default.aspx

jeg kom lige i tanker om noget... jeg er lidt i tvivl... bruger du, eller bruger du IKKE VS.Net??
Avatar billede tknudsen Nybegynder
01. december 2002 - 19:49 #13
I dette projekt bruger jeg IKKE vs.net !!! Så det er manuel kompilereng mm...
Avatar billede tknudsen Nybegynder
01. december 2002 - 19:50 #14
"weeh"

:-)
Avatar billede burningice Nybegynder
01. december 2002 - 19:55 #15
ah.. så skal du ikke bruge codebehind, men src. Codebehind er noget VS.Net ting (så den kan holde styr på hvad høre til hvad), og ignoreres af din compiler

src til mit eksempel:

default.aspx:

<%@ Page Language="C#" Src="default.aspx.cs" Inherits="Example._default" autoeventwireup="false" %>

<html>
<head></head>
<body>

<form runat="server">
    <asp:label id="lblInfo" runat="server" /><br />
    <asp:button id="bntSubmit" text="Submit" OnClick="btnSubmit_Click" runat="server" />
</form>

</body>
</html>

default.aspx.cs

using System;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;

namespace Example
{
    public class _default : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Label lblInfo;
        protected System.Web.UI.WebControls.Button btnSubmit;

        public void btnSubmit_Click(object sender, System.EventArgs e)
        {
            lblInfo.Text = "weeh";
        }
           
    }
}
Avatar billede tknudsen Nybegynder
01. december 2002 - 20:09 #16
"'lblTest' is not a member of 'ASP.list_aspx'." ?
Avatar billede tknudsen Nybegynder
01. december 2002 - 20:11 #17
lblTest ER erklæeret som Protected i code-behind klassen - som jeg referere til via src:

<%@ Page Language="VB" src="list.aspx.vb" Inherits="Autohuset.ListPage" autoeventwireup="false" %>
Avatar billede tknudsen Nybegynder
01. december 2002 - 20:12 #18
Public Class ListPage
    Inherits Page

    Protected listSearch As SearchGrid
    Protected lblTest As Label

...

    Public Sub TypeCommand(sender As Object, e As DataGridCommandEventArgs)
      lblTest.Text = "dims"
'        Dim objRow As TableCellCollection = e.Item.Cells
'        Dim objCustomer As New Customer()
'        objCustomer.Id = CInt(objRow.Item(0).Text)
'        objCustomer.Name = objRow.Item(1).Text
'        objCustomer.Address = objRow.Item(2).Text
'        objCustomer.PoBox = objRow.Item(3).Text
'        objCustomer.Phone = objRow.Item(5).Text
'        objCustomer.EMail = objRow.Item(6).Text
'       
'        If Not Session.Item("object") Is Nothing Then
'            Session.Item("object") = objCustomer
'        Else
'            Session.Add("object",objCustomer)
'        End If
'   
'        Response.Redirect("edit.aspx")
    End Sub
Avatar billede tknudsen Nybegynder
01. december 2002 - 20:13 #19
hmm - ville have fjernet alle de udkommenterede liner inden jeg postede... men ak - min finmotorik udeblev... :-)
Avatar billede burningice Nybegynder
01. december 2002 - 20:14 #20
prøver Protected lblTest As System.Web.UI.WebControls.Label... selvom.. det egentlig ikke burde gøre nogen forskel...
Avatar billede tknudsen Nybegynder
01. december 2002 - 20:20 #21
fejlen ser ud til at have noget at gøre med at aspx-filen ikke kan finde div objekter og metoder !? Skal namespacet importeres i aspx-filen ?
Avatar billede tknudsen Nybegynder
01. december 2002 - 20:25 #22
ingen forskel...
Avatar billede burningice Nybegynder
01. december 2002 - 20:26 #23
nej... det behøves ikke...

så længe du bruger src til din codebehind fil, og inheritter den rigtige klasse (altså namespace.klasse) skulle det virke... ligesom i mit eksempel (det er godt nok c# men opbygningen er den samme)
Avatar billede tknudsen Nybegynder
01. december 2002 - 20:34 #24
ja - det undrer mig meget at det ikke fungere... jeg kigger på det...

tak for hjælpen so far...
Avatar billede burningice Nybegynder
01. december 2002 - 21:01 #25
du kunne evt. prøve med at lave en side i vb, der gør nøjagtig det samme som mit eksempel, og ikke andet. når det så virker, så kan du prøve at sætte mere og mere på... indtil det enten går galt, eller virker som det skal.
Avatar billede tknudsen Nybegynder
02. december 2002 - 20:47 #26
hmmm - selv den simple applikation giver samme fejl... det må være noget mere grundlæggende, som er galt... måden jeg kompilerer ?

vbc /t:library /out:bin/testlist.dll /r:system.dll /r:system.data.dll /r:system.web.dll /r:Microsoft.VisualBasic.dll /r:system.xml.dll testlist.aspx.vb


testlist.aspx.vb:
Imports System
Imports System.Web.UI
Imports System.Web.UI.WebControls

Namespace Test

    Public Class TestList
        Inherits Page
   
        Protected lblTest As Label
        Protected btnTest As Button

        Public Sub TestIt(Sender As Object, e As EventArgs)
            lblTest.Text = "Dims"
        End Sub   

    End Class
End Namespace

testlist.aspx:

<%@ Page Language="VB" Src="testlist.aspx.vb" Inherits="Test.TestList" AutoEventWireup="False" %>
<html>
<head>
</head>
<body>
    <form runat="server">
        <asp:label id="lblTest" runat="server" /><br />
        <asp:button id="btnTest" runat="server" text="Text" onClick="TestIt" />
    </form>
</body>
</html>
Avatar billede tknudsen Nybegynder
02. december 2002 - 20:56 #27
fejl beskrivelse:

Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: BC30456: 'btnTest' is not a member of 'ASP.testlist_aspx'.

Source Error:

Line 4:  </head>
Line 5:  <body>
Line 6:      <form runat="server">
Line 7:          <asp:label id="lblTest" runat="server" /><br />
Line 8:          <asp:button id="btnTest" runat="server" text="Text" onClick="TestIt" />


(linie 6 er markeret)
Avatar billede burningice Nybegynder
02. december 2002 - 21:17 #28
tknudsen>> hmmmmmmm... det forstår jeg virkelig ikke... det er længe siden jeg selv har haft brug for at kompilere noget manuelt, men jeg kan huske at jeg dengang ikke lavede referencer til hverken system.dll, system.data.dll
Avatar billede burningice Nybegynder
02. december 2002 - 21:21 #29
...er du sikker på at det er nødvendigt? men, det burde jo stadigvæk ikke være det... for den compiler vel fint din testlist.dll?

lad mig gætte, Compiler Error Message: BC30456: 'btnTest' is not a member of 'ASP.testlist_aspx'. kommer første gang du går ind på siden?
Avatar billede tknudsen Nybegynder
02. december 2002 - 23:12 #30
BC30456: 'lblTest' is not a member of 'ASP.list_aspx'.

ja - når jeg går ind på siden !?
Avatar billede tknudsen Nybegynder
04. december 2002 - 09:11 #31
Nu har jeg fået det til at virke:

Hvis jeg undlader at kompilere codebehind-klassen ned i et assembly virker det.

Men det brude man da kunne - rigth ?
Avatar billede tknudsen Nybegynder
04. december 2002 - 09:11 #32
cyberfessor >> hvis du svarer er der point !
Avatar billede burningice Nybegynder
04. december 2002 - 09:56 #33
tknudsen>> aah... jeg kan ikke se skoven for træer... nej, du skal IKKE compile den, da du bruger src-tag'et til at angive hvor du henter koden fra.
Avatar billede tknudsen Nybegynder
04. december 2002 - 10:31 #34
Mange tak...
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