Avatar billede karsten_larsen Praktikant
29. august 2007 - 00:55 Der er 10 kommentarer og
1 løsning

Opret button i table fra codebehind

Vil gerne fra codebehind kunne tilføje en knap til en tabel, som også genereres fra codebehind.

Har prøvet med følgende, men kan ikke få det til at lykkedes.

        Dim Knap As New Button

        Dim DemoTabel As Table = New Table()
        Dim tr As TableRow = New TableRow()
        Dim tc As TableCell = New TableCell()
        Dim tc2 As TableCell = New TableCell()

        Dim i As Integer
        For i = 0 To 3 - 1 Step i + 1
            tr = New TableRow()
            tc = New TableCell()
            tc.Text = "test" + i.ToString()

            tc2 = New TableCell()
            tc2.Text = Knap.Text("Send")

            tr.Cells.Add(tc)
            tr.Cells.Add(tc2)
            DemoTabel.Rows.Add(tr)

        Next

Hvordan løses det?

??:-) karsten_larsen
Avatar billede nielle Nybegynder
29. august 2007 - 06:59 #1
Sådan?

        Dim DemoTabel As Table = New Table()
        Dim tr As TableRow = New TableRow()
        Dim tc As TableCell = New TableCell()
        Dim tc2 As TableCell = New TableCell()

        Dim i As Integer
        For i = 0 To 3 - 1 Step i + 1
            tr = New TableRow()
            tc = New TableCell()
            tc.Text = "test" + i.ToString()

            Dim knap As New Button()
            knap.Text = "Send (" & i.ToString() & ")"

            tc2 = New TableCell()
            tc2.Controls.Add(knap)

            tr.Cells.Add(tc)
            tr.Cells.Add(tc2)
            DemoTabel.Rows.Add(tr)
        Next
Avatar billede neoman Novice
29. august 2007 - 08:28 #2
Og hvis den knap skal kunne noget, så skal du vel have en handler med ?

        AddHandler knap.Click, AddressOf knap_Click

hvor din knap_Click er en almindelig handler, dog uden Handles... clause i signaturen

Du tilføjer vel den tabel til en Panel eller Placeholder efterfølgende ? Man kan også lægge selve <asp:Table ID="blah" runat="server" ><asp:Table/> fast i selve aspx filen, mens rækkerne så tilføjes i code-behind.
Avatar billede neoman Novice
29. august 2007 - 08:34 #3
Og hvis du har varierende antal knapper fra gnag til gang, så skal du huske at give hver knap et specifikt ID, ellers kan der gå ged i ViewState.
Avatar billede karsten_larsen Praktikant
29. august 2007 - 08:42 #4
Prøvet at kombinere jeres input, men kan ikke fange handler.

Koden ser således ud:

    Sub DemoDrawtable()

        Dim DemoTabel As Table = New Table()
        Dim tr As TableRow = New TableRow()
        Dim tc As TableCell = New TableCell()
        Dim tc2 As TableCell = New TableCell()

        Dim i As Integer
        For i = 0 To 3 - 1 Step i + 1
            tr = New TableRow()
            tc = New TableCell()
            tc.Text = "test" + i.ToString()

            Dim knap As New Button()
            knap.Text = "Send (" & i.ToString() & ")"
            AddHandler knap.Click, AddressOf knap_Click

            tc2 = New TableCell()
            tc2.Controls.Add(knap)

            tr.Cells.Add(tc)
            tr.Cells.Add(tc2)
            DemoTabel.Rows.Add(tr)
        Next

        plc.Controls.Add(DemoTabel)
    End Sub

    Protected Sub knap_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        If Page.IsPostBack = True Then
            Response.Write("Demo virker")
        End If
    End Sub

Det burde da give et resultat.

Hvordan vil man kunne skelnen mellem de forskellige knapper i knap_Click

:-) karsten_larsen
Avatar billede neoman Novice
29. august 2007 - 08:49 #5
Du kan finde ud af hvad knappen hedder inde i handleren ud fra sender mener jeg - noget i stil med

Dim myButton as Button = Sender
'mit ID' = myButton.ID

alternativt er der vist en e.CommandSource ting som giver det samme (kan ikke helt huske hvilken af de to optioner funker her)

og for test er dette jo nok tilstrækkeligt:)

    Protected Sub knap_Click(ByVal sender As Object, ByVal e As System.EventArgs)

            Response.Write("Demo virker")

    End Sub

så i alt:


    Protected Sub knap_Click(ByVal sender As Object, ByVal e As System.EventArgs)
dim myButton as Button = sender
            Response.Write(myButton.ID.ToString)

    End Sub
Avatar billede neoman Novice
29. august 2007 - 08:50 #6
Du huskede  at kalde DemoDrawtable() også ved postback ?
Avatar billede karsten_larsen Praktikant
29. august 2007 - 09:01 #7
Det fungerer fint nu, og til andre som kan bruge løsningen:


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Page.IsPostBack = False Then
            DemoDrawtable()
        End If
        If Page.IsPostBack = True Then
            DemoDrawtable()
        End If
    End Sub

    Sub DemoDrawtable()

        Dim DemoTabel As Table = New Table()
        Dim tr As TableRow = New TableRow()
        Dim tc As TableCell = New TableCell()
        Dim tc2 As TableCell = New TableCell()

        Dim i As Integer
        For i = 0 To 3 - 1 Step i + 1
            tr = New TableRow()
            tc = New TableCell()
            tc.Text = "test" + i.ToString()

            Dim knap As New Button()
            knap.Text = "Send (" & i.ToString() & ")"
            knap.ID = (i.ToString())
            AddHandler knap.Click, AddressOf knap_Click

            tc2 = New TableCell()
            tc2.Controls.Add(knap)

            tr.Cells.Add(tc)
            tr.Cells.Add(tc2)
            DemoTabel.Rows.Add(tr)
        Next

        plc.Controls.Add(DemoTabel)
    End Sub

    Protected Sub knap_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim myButton As Button = sender
        Response.Write(myButton.ID.ToString)
    End Sub

nielle -> vil du lave et svar, du har givet svar på oprindelig spørgsmål.
neomann -> laver et nyt sp til dig med point for den ekstra hjælp.

:-) karsten_larsen
Avatar billede nielle Nybegynder
29. august 2007 - 13:56 #8
Vi kan sagtens dele - og ellers kan man, oppe under Funktioner i øverste venstre side, sagtens tildele flere point til et spørgsmål.

... og et svar :^)
Avatar billede karsten_larsen Praktikant
29. august 2007 - 14:27 #9
Den funktion kendte jeg ikke, den vil jeg bruge næste gang, så der ikke bliver for meget spam, tak for fiffet.
:-) karsten_larsen
Avatar billede saudoo Nybegynder
05. september 2007 - 21:15 #10
Hvis der nu er flere knapper, pga. looping eller ligende, skal du huske at bruge knap_command og tilføje den et commandargument, så du kan skelne knapperne fra hinanden.. :)
Avatar billede karsten_larsen Praktikant
06. september 2007 - 07:17 #11
saudoo -> tak for tippet
:-) karsten_larsen
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