我正在使用连接的 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