[ASP.NET] Binnen een sub aangemaakte button niet te handlen

Pagina: 1
Acties:

  • TheLemon
  • Registratie: Augustus 2001
  • Laatst online: 02-04-2025

TheLemon

daddy cool, crazy like a fool

Topicstarter
De titel is wat wazig, dus hier een duidelijkere uitleg :P :

Ik heb een sub die een tabel dynamisch vult met wat gegevens uit een database. Er wordt per rij een 'delete'-imagebutton in de eerste cel gezet. Dit gaat allemaal prachtig mooi, afhankelijk van het aantal records in de DB maakt hij de rijen met knopjes aan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 Do While drSeminars.Read()

     Dim tr As New TableRow()
     Dim cdelete1 As New TableCell()
     tr.Cells.Add(cdelete1)
     Dim t = cint(drSeminars.Getvalue(0))
     Dim btDelete(t) As ImageButton
     btDelete(t).ImageUrl = ("deletebutton.gif")
     cdelete1.Controls.Add(btDelete(t))

     For c = 1 To (drSeminars.FieldCount - 1)
         v = drSeminars.GetValue(c)
         Dim td As New TableCell()
         tr.Cells.Add(td)
         td.Text = v
     Next

 tblSeminars.Rows.Add(tr)
 
 Loop


Kolom 0 is de ID van de record, die dus niet zichtbaar in de tabel wordt gezet, maar als index aan de imagebutton wordt toegevoegd om hem later uniek te kunnen identificeren. Ik weet ook niet of ik dit helemaal goed doe.

Nu de tricky part:
Ik wil de 'click' method van die knopjes buiten de sub handlen, maar buiten de sub bestaan de buttons niet. Binnen een sub kan ik geen sub aanmaken voor de eventhandler, dus dat valt ook af.

Heeft iemand een idee hoe ik dit kan oplossen? :)

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ik weet niet hoe de event afhandeling in vb.net gaat maar in C# kan je gewoon zo doen
C#:
1
myButton.Click += new EventHandler( MyClickEventHandler );

Als je dus in VB.NET ook zo met delegates kan werken is dat de manier om een eventhandler aan je ImageButton's te hangen.

[ Voor 73% gewijzigd door Woy op 08-12-2003 17:18 . Reden: Even de quote weggehaald ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Addhandler heet dat in VB.Net :P

@TS: Alleen waarom denk je trouwens dat ze datagrids en datalists hebben uitgevonden in ASP.Net :?

En volgens mij geeft hij nog een error op regel 7

[ Voor 19% gewijzigd door gorgi_19 op 08-12-2003 17:29 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

rwb schreef op 08 december 2003 @ 17:17:
Ik weet niet hoe de event afhandeling in vb.net gaat maar in C# kan je gewoon zo doen
C#:
1
myButton.Click += new EventHandler( MyClickEventHandler );

Als je dus in VB.NET ook zo met delegates kan werken is dat de manier om een eventhandler aan je ImageButton's te hangen.
Visual Basic .NET:
1
 Sub MyClickEventHandler(ByVal sender as ...) Handles myButton.Click


@gorgi_19 je hebt gelijk

[ Voor 4% gewijzigd door Verwijderd op 08-12-2003 17:33 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

@toffenboy: Da's wat anders.....

Hierbij ga je er vanuit dat de var al declared is in de scope waar de sub ook in staat. Je voegt niet dynamisch een handler toe, wat rwb wel doet, en jij niet.

Je zult toch met Addhandler aan de gang moeten.

[ Voor 86% gewijzigd door gorgi_19 op 08-12-2003 17:31 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • TheLemon
  • Registratie: Augustus 2001
  • Laatst online: 02-04-2025

TheLemon

daddy cool, crazy like a fool

Topicstarter
Ja precies, dat werkt dus niet omdat btDelete(t) niet wordt herkend buiten mijn sub.
@gorgi_19: Ja ik ken die datagrid, daar ben ik mee begonnen, maar ik heb het idee dat ik met een 'table' servercontrol meer controle heb over alle attributen van elke cel.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

TheLemon schreef op 08 december 2003 @ 17:32:
Ja precies, dat werkt dus niet omdat btDelete(t) niet wordt herkend buiten mijn sub.
@gorgi_19: Ja ik ken die datagrid, daar ben ik mee begonnen, maar ik heb het idee dat ik met een 'table' servercontrol meer controle heb over alle attributen van elke cel.
Erhm.. Das dus volstrekt kolder.. :P

Desnoods maak je eigen templatecolumns aan; heb je zo veel flexibiliteit als je wilt. In de meeste gevallen is een boundcolumn echter voldoende.
Deze heeft een aantal properties die je kan aanpassen. Ik ben dan wel heel benieuwd naar wat voorbeelden, welke een gebrek een flexibiliteit kennen.

Alleen in het geval van je deleteknopje moet je een templatecolumn maken; een buttoncolumn zou evt. ook nog kunnen.

trouwens, die foutmelding die je zou krijgen, doelde ik eigenlijk op iets anders, omdat er geen instantie van het object is, en je wel iets met het object wil doen. (imageUrl wijzigen)

[ Voor 13% gewijzigd door gorgi_19 op 08-12-2003 17:35 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • TheLemon
  • Registratie: Augustus 2001
  • Laatst online: 02-04-2025

TheLemon

daddy cool, crazy like a fool

Topicstarter
Ok, ik geloof je graag. Het klinkt flauw van me, maar ik ben nu al een tijd bezig met die table, dus ik zou het eigenlijk willen oplossen zo. Als ik iets onmogelijks vraag, dan zal ik toch opnieuw moeten beginnen en dan met een datagrid.
Kun je een voorbeeld geven adhv mijn code hoe ik die addhandler zou moeten toepassen? Ik kom er met de help niet echt uit.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Zie [rml]gorgi_19 in "[ C#/.NET] Dynamische Controls en Postbac..."[/rml]

Het Addhandler gedeelte moet je iig hebben; de rest mag je vergeten; je hebt vervolgens het click-event nodig :)
Dus iets als Addhandler button.click, addressof HierjeSub

En herschrijf
Visual Basic .NET:
1
2
     Dim btDelete(t) As ImageButton
     btDelete(t).ImageUrl = ("deletebutton.gif")

Dan gelijk even naar
Visual Basic .NET:
1
2
3
4
     Dim btDelete As ImageButton = new ImageButton
     btDelete.ImageUrl = ("deletebutton.gif")
     btDelete.CommandArgument = t
     Addhandler btDelete.Click, AddressOf YourDeleteAction


Die commandargument is iig iets dat je niet moet vergeten; ik verwacht dat we je anders over een half uurtje weer terugzien hoe je kan achterhalen in welke rij er is geklikt. :+

[ Voor 98% gewijzigd door gorgi_19 op 08-12-2003 17:45 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Op MSDN kun je veel info vinden. Ook veel info over de toch wel aan te raden datagrid

  • TheLemon
  • Registratie: Augustus 2001
  • Laatst online: 02-04-2025

TheLemon

daddy cool, crazy like a fool

Topicstarter
Ten 1e: sorry maar ik ben redelijke VB-noob ;) , ik krijg de volgende foutmelding als ik gorgi_19's voorbeeld aanhou:

Method 'Sub YourDeleteAction(t As Integer)' does not have the same signature as delegate 'Delegate Sub ImageClickEventHandler(sender As Object, e As System.Web.UI.ImageClickEventArgs)'.

Ik weet ook niks van signatures en delegates. Gorgi_19 heb je een MSN-account, dat praat wat makkelijker?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Visual Basic .NET:
1
2
3
Public Sub YourDeleteAction (sender As Object, e As System.Web.UI.ImageClickEventArgs)
    ' je acties
End sub

:)

Het was ook een gedeelte van de oplossing; ik had gedacht dat je de method er zelf wel bij kon bedenken. :)

[ Voor 31% gewijzigd door gorgi_19 op 08-12-2003 18:01 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

die t haal je uit je commandargument
Visual Basic .NET:
1
e.commandargument
denk ik.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 08 december 2003 @ 18:02:
die t haal je uit je commandargument
Visual Basic .NET:
1
e.commandargument
denk ik.
Dat kan dus niet.. :P

System.web.UI.ImageClickEventArgs heeft geen property commandArgument :P

Het truukje is veel gemener...
Visual Basic .NET:
1
2
Dim __imageButton as Imagebutton = Ctype(sender, ImageButton)
Dim __idToDelete as integer = Int32.Parse(__imageButton.CommandArgument)

[ Voor 26% gewijzigd door gorgi_19 op 08-12-2003 18:06 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • TheLemon
  • Registratie: Augustus 2001
  • Laatst online: 02-04-2025

TheLemon

daddy cool, crazy like a fool

Topicstarter
Ontzettend bedankt, het werkt, hier was ik nooit uitgekomen.
Nu ga ik op mijn gemak kijken of ik alles ook snap ;) (je moet blijven leren immers)
Pagina: 1