无法弄清楚如何解决此问题。如果我向数据库添加行并关闭表单,然后打开表单删除行,我没有问题。仅当我在不关闭表单的情况下添加行和删除行时才会出现此问题。当表单关闭时会发生什么?当表单打开时不会发生?
如果选中某个框,则会将其添加到数据库中。如果取消选中某个框,则会将其删除。
并发冲突:DeleteCommand影响了预期的1条记录中的0条。
无法通过该行访问已删除的行信息。
Private Sub CreateNewDataRow(intNewTreeView As Integer, intNewUserID As Integer)
Dim tvGeneric As Windows.Forms.TreeView
Dim intTopic As Integer
tvGeneric = GetTreeView(intNewTreeView)
intTopic = intNewTreeView
Try
' Loop through tabs to get checked items
For x As Integer = 0 To tvGeneric.Nodes.Count - 1
If tvGeneric.Nodes(x).Checked = True Then
Dim drNewRow As MasterDBDataSet.DBAssignedRow
drNewRow = MasterDBDataSet.DBAssigned.NewDBAssignedRow
With drNewRow
.AssignedUser = intNewUserID
.AssignedTask = tvGeneric.Nodes(x).Tag
.AssignedTopic = intTopic
.AssignedCompleted = 0
.AssignedWorkCenter = m_intWorkCenter
.MergeID = Merge.RandomNumber()
End With
For Each Task As DataRow In MasterDBDataSet.DBTasks
If Task.Item("TaskTopic") = intTopic Then
If Task.Item("MergeID") = drNewRow.AssignedTask Then
Try
drNewRow.AssignedHours = CInt(Task.Item("TimePerTask"))
Catch ex As Exception
End Try
End If
End If
Next
If CheckExistingAssignments(intNewUserID, drNewRow.AssignedTopic, drNewRow.AssignedTask) Then
MasterDBDataSet.DBAssigned.Rows.Add(drNewRow)
End If
DbAssignedTableAdapter.Update(MasterDBDataSet.DBAssigned)
Else
' If check box unchecked, remove from database
For Each OldAssigned As DataRow In MasterDBDataSet.DBAssigned
If OldAssigned.Item("AssignedTask") = tvGeneric.Nodes(x).Tag And OldAssigned.Item("AssignedUser") = intNewUserID Then
Try
OldAssigned.Delete()
Catch ex As Exception
End Try
Exit For
End If
Next
DbAssignedTableAdapter.Update(MasterDBDataSet.DBAssigned)
End If
Next
DbAssignedTableAdapter.Update(MasterDBDataSet.DBAssigned)
Catch ex As Exception
Logger.WriteLog("ERROR : " & ex.Message)
End Try
End Sub
答案 0 :(得分:0)
通过一些阅读,我能够得到一些想法。没有答案,只是想法,我尝试在TableAdapter.Update(Dataset.Table)之后添加TableAdapter.Fill(Dataset.Table),所有似乎都在工作。
就像我说这只是一个似乎对我有用的想法,不确定这是否是正确的方法。会喜欢这方面的一些意见。
这是我目前正在使用的代码。
Private Sub CreateNewDataRow(intNewTreeView As Integer, intNewUserID As Integer)
Dim tvGeneric As Windows.Forms.TreeView
Dim intTopic As Integer
tvGeneric = GetTreeView(intNewTreeView)
intTopic = intNewTreeView
Try
' Loop through tabs to get checked items
For x As Integer = 0 To tvGeneric.Nodes.Count - 1
If tvGeneric.Nodes(x).Checked = True Then
Dim drNewRow As MasterDBDataSet.DBAssignedRow
drNewRow = MasterDBDataSet.DBAssigned.NewDBAssignedRow
With drNewRow
.AssignedUser = intNewUserID
.AssignedTask = tvGeneric.Nodes(x).Tag
.AssignedTopic = intTopic
.AssignedCompleted = 0
.AssignedWorkCenter = m_intWorkCenter
.MergeID = Merge.RandomNumber()
End With
For Each Task As DataRow In MasterDBDataSet.DBTasks
If Task.Item("TaskTopic") = intTopic Then
If Task.Item("MergeID") = drNewRow.AssignedTask Then
Try
drNewRow.AssignedHours = CInt(Task.Item("TimePerTask"))
Catch ex As Exception
End Try
End If
End If
Next
If CheckExistingAssignments(intNewUserID, drNewRow.AssignedTopic, drNewRow.AssignedTask) Then
MasterDBDataSet.DBAssigned.Rows.Add(drNewRow)
End If
DbAssignedTableAdapter.Update(MasterDBDataSet.DBAssigned)
DbAssignedTableAdapter.Fill(MasterDBDataSet.DBAssigned)
Else
For Each OldAssigned As DataRow In MasterDBDataSet.DBAssigned
If OldAssigned.Item("AssignedTask") = tvGeneric.Nodes(x).Tag And OldAssigned.Item("AssignedUser") = intNewUserID Then
Try
OldAssigned.Delete()
Catch ex As Exception
End Try
Exit For
End If
Next
DbAssignedTableAdapter.Update(MasterDBDataSet.DBAssigned)
DbAssignedTableAdapter.Fill(MasterDBDataSet.DBAssigned)
End If
Next
DbAssignedTableAdapter.Update(MasterDBDataSet.DBAssigned)
Catch ex As Exception
Logger.WriteLog("ERROR : " & ex.Message)
End Try
End Sub