我只是注意到,如果用户修改了a中的某些内容,DataGridView
并且还选择了最后一行(新行)而不在其中输入任何数据,那么当HasChanged
事件触发时,该最后一行新行将包含在要添加到数据库中的行中。然后我得到一个错误,因为由于空值而无法将该记录放入数据库中。我想在特定情况下排除这一行,因为它不应被视为要添加的行。下面是我当前的代码:
For Each row As DataGridViewRow In Grid.Rows
If Not row.IsNewRow Then
Dim cellValue As String = String.Empty
For i = 1 To row.Cells.Count - 1
cellValue = row.Cells(i).Value.ToString
If String.IsNullOrEmpty(cellValue) Then
MsgBox("All fields has to be filled out")
Exit Sub
End If
Next
End If
Next
marke.MakeChangesDS()
Public Sub MakeChangesDataSet() Implements IDAL.MakeChangesDataSet
If Not GetGeschaftDataSet.HasChanges Then
MessageBox.Show("No changes to be done", "Informacja", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Else
Dim i As Integer
Try
Using MyConnection = New SqlConnection(strcon)
Using cmd As New SqlCommand("SELECT * FROM T_Marke", MyConnection)
MyConnection.Open()
' Create a data adapter in the method and throw it away afterwards
Using GetProjectsDataAdapter = New SqlDataAdapter(cmd)
Dim cmdbuilder As New SqlCommandBuilder(GetProjectsDataAdapter)
i = GetProjectsDataAdapter.Update(GetGeschaftDataSet, "trial1")
End Using
End Using
End Using
MessageBox.Show("Updated" & i & " marks", "Informacja", MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
End Sub
我想我应该检查并排除在MakeChangesDataSet函数中。
SqlDataAdapter类具有一个名为RowUpdating的事件处理程序,该事件处理程序使您可以检查行是否有效,并选择取消该行的更新。
.....
Using GetProjectsDataAdapter = New SqlDataAdapter(cmd)
Dim cmdbuilder As New SqlCommandBuilder(GetProjectsDataAdapter)
AddHandler GetProjectsDataAdapter.RowUpdating, AddressOf onUpdate
i = GetProjectsDataAdapter.Update(GetGeschaftDataSet, "trial1")
RemoveHandler GetProjectsDataAdapter.RowUpdating, AddressOf onUpdate
End Using
在实际的更新/插入/删除发生之前,需要为需要更新的每一行调用此事件。事件处理程序代码接收决定如何处理数据所需的所有信息。您会得到,StatementType
它告诉您这是INSERT,UPDATE还是DELETE操作。然后,您可以SqlRowUpdatingEventArgs.Status
在数据库引擎引发任何异常之前,决定对行设置进行处理。
Sub OnUpdate(sender as Object, args As SqlRowUpdatingEventArgs)
If args.StatementType = StatementType.Insert Then
if Not IsYourRowValid(args.Row) Then
args.Status = UpdateStatus.SkipThisRow
End If
End If
End Sub
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句