2

我正在使用连接的 sql 数据库在 vb.net 中创建动态网格视图。一切正常,除了一件事:当我单击更新命令时,无论我做什么,事件都不会触发。gridview 进入编辑模式,取消按钮工作正常。这让我花了 2 多天的时间在谷歌上搜索,但没有一个解决方案有效。我使用断点来检查代码是否已执行,但事实并非如此。如果有人在这方面有任何经验:感谢所有帮助!我相信问题出在 addhandler 上,但它没有给出任何错误。提前致谢。我忘了提到 sql 命令是一个测试并将该字段中的数据设置为 15,现在是 10,当我使用普通按钮或静态网格视图时它可以工作。

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
4

1 回答 1

0

尝试

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

代替

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

AddHandler 有时会遇到受保护的潜艇问题

于 2012-03-06T19:55:48.637 回答