Button reagiert nicht auf Click Ereignis

d-snake

Grünschnabel
Hi leute,

ich habe folgendes Problem:
Ich habe eine DataGrid
In dieser DataGrid habe ich einen editieren -und ein löschen Button.
Diese werden in der Page_Load Prozedur erstellt.
(Ich weiß das das DataGrid eine vorgefertigte Lösung mitbringt; möchte ich jedoch aus verschiedenen Gründen nicht benutzen)

Code:
        'Bearbeiten Button
        Dim btnEdit As New Button

        For i = 0 To DGrid.Items.Count - 1
            If i <> DGrid.Items.Count - 1 Then
                DGrid.Items(i).Cells(0).Controls.Add(New Button)
                btnEdit = CType(DGrid.Items(i).Cells(0).Controls(0), Button)
                btnEdit.Text = "Bearbeiten"
                btnEdit.ID = "btnEdit"

                AddHandler btnEdit.Click, AddressOf btnEdit_Click
            End If
        Next

        'Löschen Button
        Dim btnDel As New Button

        For i = 0 To DGrid.Items.Count - 1
            If i <> DGrid.Items.Count - 1 Then
                DGrid.Items(i).Cells(0).Controls.Add(New Button)
                btnDel = CType(DGrid.Items(i).Cells(0).Controls(1), Button)
                btnDel.Text = "Löschen"
                btnDel.ID = "btnDel"

                AddHandler btnDel.Click, AddressOf btnDel_Click
            Else
                DGrid.Items(i).Cells(0).Controls.Add(New Label)
            End If
        Next

Wie ihr vielleicht sehen könnt, weise ich dem Click Ereignis die Prozedur btn***_Click zu.
Klappt wunderbar. Wenn der Benutzer auf den Knopf drückt, springt der Debugger auch in diese Prozedur.
Jetzt kommt mein eigentliches Problem.

In dieser Click Prozedur(btnEdit_Click) lösche ich in der ersten Spalte der Auswahl alle Controls d.h. alle
Knöpfe und erstelle zwei neue Buttons: Speichern und Abbrechen.
Diesen Knöpfen weise ich auch ein zugehörige Prozedur zu (das gleiche wie in Page_Load).

Code:
        'Controlls löschen
        DGrid.Items(sourceItem.ItemIndex).Cells(0).Controls.Clear()

        'Speichern

        DGrid.Items(sourceItem.ItemIndex).Cells(0).Controls.Add(New Button)
        btnAccept = CType(DGrid.Items(sourceItem.ItemIndex).Cells(0).Controls(0), Button)
        btnAccept.Text = "Speichern"

        AddHandler btnAccept.Click, AddressOf btnAccept_Click

        'Abbrechen
        Dim btnAbort As New Button

        DGrid.Items(sourceItem.ItemIndex).Cells(0).Controls.Add(New Button)
        btnAbort = CType(DGrid.Items(sourceItem.ItemIndex).Cells(0).Controls(1), Button)
        btnAbort.Text = "Abbrechen"

        AddHandler btnAbort.Click, AddressOf btnAbort_Click

Er springt jetzt jedoch nicht mehr in diese Prozedur. Ich bin schon am verzweifeln und reiß mir die Haare raus :confused: .

Bitte, wenn ihr eine Erklärung, Lösung oder Fragen dazu habt, schreibt

Gruß und vielen Dank im vorraus! :)
 

Janek

Grünschnabel
Hallo, wenn ich das richtig sehe (ich entwickle sonst nur in C#), dann liegt das Problem daran, dass der Button btnAccept zwar instanziiert wird, aber beim Neuerstellen

DGrid.Items(sourceItem.ItemIndex).Cells(0).Controls.Add(New Button)

wird kein "bezug" auf die Instanz genommen. Wenn du statt "New Button" btnAccept in der obenstehenden Programmzeile verwenden würdest, dann müsste es klappen. Also folgendermassen:


DGrid.Items(sourceItem.ItemIndex).Cells(0).Controls.Add( btnAccept )

In der Zeile

btnAccept = CType(DGrid.Items(sourceItem.ItemIndex).Cells(0).Controls(0), Button)

sagst du btnAccept, dass er ein Button sein soll, nicht dass er der Button an der Oberfläche ist.



Das gleiche gilt auch für den Button btnAbort.