2

I'm creating a dynamic gridview in vb.net using a connected sql database. Everything works fine except 1 thing: when i click the update command, the event just won't fire no matter what I do. the gridview goes into edit mode and the cancel button works fine. This has cost me over 2 days of googling but none of the solutions work. I used breakpoints to check if the code was executed, but it wasn't. If anybody has any experience in this: all help is appreciated! I believe the problem lies in the addhandler but it doesn't give any errors. thanks in advance. I forgot to mention that the sql command was a test and sets the data in that field to 15, now it's 10, it works when i use a normal button or a static gridview.

Public Class WebForm1
    Inherits System.Web.UI.Page
    Dim rowscount As Integer = 2
    Dim colcount As Integer = 18
    Dim aantalitems As Integer = 0
    Dim sqlstring() As String
    Dim hj As String
    Dim k As Integer = 0
    Dim l As Integer = 0
    Dim m1 As Integer = 0
    Dim m2 As Integer = 0
    Dim m3 As Integer = 0
    Dim cellheight As Integer = 20



    Public Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'Creat the Table and Add it to the Page
        GetItems()
    Dim table As New Table()
    table.ID = "Table"
    Page.Form.Controls.Add(table)
    table.HorizontalAlign = HorizontalAlign.Center

    ' Now iterate through the table and add your controls 
    For i As Integer = 0 To (aantalitems) * 2

        Dim row As New TableRow()
        For j As Integer = 0 To rowscount - 1
            Dim tb As New GridView
            Dim cell As New TableCell()
            Dim cnnstring As New SqlClient.SqlConnection
            Dim sdrString As SqlClient.SqlDataReader
            Dim scmdString As New SqlClient.SqlCommand

            If i Mod 2 = 0 And j = 0 Then

                Dim label As New Label
                label.ID = j & i
                cell.Height = cellheight
                ReDim Preserve sqlstring(aantalitems)
                label.Text = sqlstring(k)
                cell.Controls.Add(label)
                row.Cells.Add(cell)
            ElseIf i Mod 2 = 0 Then
                Dim label As New Label
                label.ID = j & i
                cell.Height = cellheight
                label.Visible = False
                cell.Controls.Add(label)
                row.Cells.Add(cell)
            Else
                If j = 1 Then

                    cnnstring.ConnectionString = My.Settings.link
                    scmdString.Connection = cnnstring
                    cnnstring.Open()
                    ReDim Preserve sqlstring(aantalitems)

                    scmdString.CommandText = "SELECT Maat, min_voorraad, Huidige_voorraad, Actief, Frequentie FROM tblStock WHERE Item = '" & sqlstring(k) & "'"
                    k += 1

                    sdrString = scmdString.ExecuteReader
                    ' Set a unique ID for each TextBox added
                    tb.ID = "GV" & i & "_" & j

                    tb.DataSource = sdrString
                    tb.AutoGenerateEditButton = True
                    tb.EnableSortingAndPagingCallbacks = True


                    AddHandler tb.RowEditing, AddressOf TaskGridView_RowEditing
                    AddHandler tb.RowCancelingEdit, AddressOf TaskGridView_RowCancelingEdit
                    AddHandler tb.PageIndexChanging, AddressOf TaskGridView_PageIndexChanging
                    AddHandler tb.RowUpdating, AddressOf TaskGridView_rowupdating

                    tb.DataBind()

                    ' Add the control to the TableCell
                    cell.Controls.Add(tb)
                    ' Add the TableCell to the TableRow
                    row.Cells.Add(cell)
                    ' vanaf hier invoeren wat er in de textboxen moet komen

                    cnnstring.Close()
                    sdrString.Close()

                    cnnstring.Dispose()
                    sdrString.Dispose()
                    scmdString.Dispose()
                Else

                    Dim afbeelding As New Image
                    afbeelding.ID = "Afbeelding" & i.ToString
                    cell.Controls.Add(afbeelding)
                    row.Cells.Add(cell)
                    afbeelding.ImageAlign = ImageAlign.Bottom
                    ReDim Preserve sqlstring(aantalitems)



                    afbeelding.ImageUrl = My.Settings.Iurl & sqlstring(l) & ".jpg"
                    l += 1
                End If
            End If
        Next

        ' Add the TableRow to the Table
        table.Rows.Add(row)

    Next

End Sub

Sub CustomersGridView_RowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs)
    Dim customersGridView As GridView = CType(sender, GridView)
    Dim frequntie As String = customersGridView.Rows(e.NewEditIndex).Cells(5).Text
    If frequntie = "1x jaar" Then
        e.Cancel = True
        MsgBox("You cannot edit this record.")

    Else

        MsgBox("")

    End If

End Sub

Protected Sub TaskGridView_rowupdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs)
    Dim Taskgridview As GridView = CType(sender, GridView)
    Dim cnnstring5 As New SqlClient.SqlConnection
    Dim scmdstring5 As New SqlClient.SqlCommand

    MsgBox("zou het werken?")


    cnnstring5.ConnectionString = My.Settings.link
    scmdstring5.Connection = cnnstring5
    cnnstring5.Open()
    scmdstring5.CommandText = "UPDATE tblStock SET min_voorraad = 15"
    scmdstring5.ExecuteNonQuery()

    cnnstring5.Close()
    cnnstring5.Dispose()
    scmdstring5.Dispose()




End Sub

Protected Sub TaskGridView_PageIndexChanging(ByVal sender As Object, ByVal e As GridViewPageEventArgs)
    Dim Taskgridview As GridView = CType(sender, GridView)
    Taskgridview.PageIndex = e.NewPageIndex
    'Bind data to the GridView control.
    MsgBox("Dit werkt")

    Taskgridview.DataBind()


End Sub

Protected Sub TaskGridView_RowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs)
    Dim Taskgridview As GridView = CType(sender, GridView)

    'Set the edit index.
    Taskgridview.EditIndex = e.NewEditIndex

    'Bind data to the GridView control.
    Dim cnnstring3 As New SqlClient.SqlConnection
    Dim sdrString3 As SqlClient.SqlDataReader
    Dim scmdstring3 As New SqlClient.SqlCommand
    Dim uniekeID, subUniekeID As String
    Dim ez As Integer = 0

    uniekeID = Taskgridview.UniqueID.ToString
    subUniekeID = uniekeID.Substring(2, +2)
    If IsNumeric(subUniekeID) Then
        ez = CInt(subUniekeID)
        ez -= 1
        ez /= 2
    ElseIf IsNumeric(subUniekeID.Substring(0, +1)) Then
        ez = CInt(subUniekeID.Substring(0, +1))
        ez -= 1
        ez /= 2
    Else
        MsgBox("Hier is iets fout!" & vbNewLine & "Deze code werkt nog niet met over de honderd items!")

    End If


    cnnstring3.ConnectionString = My.Settings.link
    scmdstring3.Connection = cnnstring3
    cnnstring3.Open()
    ReDim Preserve sqlstring(aantalitems)
    scmdstring3.CommandText = "SELECT Maat, min_voorraad, Huidige_voorraad, Actief, Frequentie FROM tblStock WHERE Item = '" & sqlstring(ez) & "'"
    sdrString3 = scmdstring3.ExecuteReader
    Taskgridview.DataSource = sdrString3
    Taskgridview.DataBind()

    sdrString3.Close()
    cnnstring3.Close()
    sdrString3.Dispose()
    cnnstring3.Dispose()
    scmdstring3.Dispose()



End Sub

Protected Sub TaskGridView_RowCancelingEdit(ByVal sender As Object, ByVal e As GridViewCancelEditEventArgs)
    Dim Taskgridview As GridView = CType(sender, GridView)

    Taskgridview.EditIndex = -1
    Dim cnnstring4 As New SqlClient.SqlConnection
    Dim sdrString4 As SqlClient.SqlDataReader
    Dim scmdstring4 As New SqlClient.SqlCommand
    Dim uniekeID, subUniekeID As String
    Dim ez As Integer = 0

    uniekeID = Taskgridview.UniqueID.ToString
    subUniekeID = uniekeID.Substring(2, +2)
    If IsNumeric(subUniekeID) Then
        ez = CInt(subUniekeID)
        ez -= 1
        ez /= 2
    ElseIf IsNumeric(subUniekeID.Substring(0, +1)) Then
        ez = CInt(subUniekeID.Substring(0, +1))
        ez -= 1
        ez /= 2
    Else
        MsgBox("Hier is iets fout!" & vbNewLine & "Deze code werkt nog niet met over de honderd items!")

    End If
    cnnstring4.ConnectionString = My.Settings.link
    scmdstring4.Connection = cnnstring4
    cnnstring4.Open()
    ReDim Preserve sqlstring(aantalitems)

    scmdstring4.CommandText = "SELECT Maat, min_voorraad, Huidige_voorraad, Actief, Frequentie FROM tblStock WHERE Item = '" & sqlstring(ez) & "'"
    sdrString4 = scmdstring4.ExecuteReader
    Taskgridview.DataSource = sdrString4
    Taskgridview.DataBind()
    sdrString4.Close()
    cnnstring4.Close()
    sdrString4.Dispose()
    cnnstring4.Dispose()
    scmdstring4.Dispose()



End Sub

Private Sub GetItems()
    Dim cnnvoorraad As New SqlClient.SqlConnection
    Dim scmdVoorraad As New SqlClient.SqlCommand
    Dim sdrVoorraad As SqlClient.SqlDataReader
    Dim cnnstring As String = My.Settings.link
    cnnvoorraad.ConnectionString = cnnstring
    cnnvoorraad.Open()
    scmdVoorraad.Connection = cnnvoorraad
    scmdVoorraad.CommandText = "SELECT DISTINCT Item FROM tblStock"
    sdrVoorraad = scmdVoorraad.ExecuteReader

    Do While sdrVoorraad.Read
        Dim strLijn As String

        strLijn = sdrVoorraad.Item("Item").ToString
        ReDim Preserve sqlstring(aantalitems)
        sqlstring(aantalitems) = strLijn
            aantalitems += 1

        Loop
        cnnvoorraad.Close()
    End Sub
End Class

1 Answers1

0

try

Sub TaskGridView_RowEditing(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs)

instead of

Protected Sub TaskGridView_RowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs)

AddHandler sometimes has problems with protected subs

Ton
  • 316
  • 2
  • 12
  • thanks for the reply but it still isn't working, "updating" still doesn't do anything while "cancel" and "edit" work perfectly, I've tried changing them all to normal subs but still nothing. – user1194585 Mar 18 '12 at 15:48