在我的应用程序中,我有一个用于输入一些详细信息并最终保存在数据库中的表单。我在数据库中有日志记录表来保存在特定记录中所做的所有更改。我使用编辑表单编辑这些详细信息,即从数据库获取数据以填写编辑表单。
如果我以编辑形式更改任何选项,那么我将有标志变量和该特定更改的消息存储在数据库中。
对于组合框选择更改,我有事件处理程序SelectionChangeCommitted()
,它工作正常。
但是对于文本框,如果我使用TextChanged()
,则在我添加数据以从数据库本身编辑表单时会触发此事件处理程序。因此,即使不更改文本框中的任何内容,标志集true
和日志记录表也会将更改添加为日志。我该如何限制呢?
编辑表单:
ra_edittool = cmda_edittool.ExecuteReader()
While ra_edittool.Read()
frma_edit.ne_editindex = ra_edittool("id").ToString()
frma_edit.e1.SelectedItem = ra_edittool("Process").ToString()
frma_edit.e2.Text = ra_edittool("Risk Description").ToString()
frma_edit.e3.SelectedItem = ra_edittool("Likelihood").ToString()
frma_edit.e4.SelectedItem = ra_edittool("Occurrences").ToString()
frma_edit.e14.Text = ra_edittool("Mitigation Plan").ToString()
End While
conn.Close()
在保存编辑表单时:
使用'UPDATE'
命令将数据保存到数据库表后。我正在调用EditLog()
函数来保存日志。
Private Sub Editlog()
Dim message As String = ""
If fRiskChange(0) = True Then
message = " Likelihood for the Risk was changed"
ElseIf fRiskChange(1) = True Then
message = " Previous Occurences option for the Risk was changed"
ElseIf fRiskChange(10) = True Then
message = " Mitigation Plan for the Risk was changed"
Dim rSquery As String
rSquery = "INSERT INTO riskedit_log (timestamp ,Process,risk_id,user_id,message)"
rSquery = rSquery + "VALUES(curdate(),@process,@riskid,@user,@message);"
conn.Open()
Dim reditlog As New MySqlCommand(rSquery, conn)
reditlog.Parameters.AddWithValue("Process", sProcName)
reditlog.Parameters.AddWithValue("riskid", ne_editindex)
reditlog.Parameters.AddWithValue("user", "NULL")
reditlog.Parameters.AddWithValue("message", message)
reditlog.ExecuteNonQuery()
conn.Close()
End Sub
这些控件的事件处理程序:
Private Sub e3_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles e3.SelectionChangeCommitted
' MsgBox("Likelihood")
fRiskChange(0) = True
End Sub
Private Sub e4_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles e4.SelectionChangeCommitted
' MsgBox("Previous Occurences value changed")
fRiskChange(1) = True
End Sub
Private Sub e14_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles e14.TextChanged
' MsgBox("Mitigation plan changed")
fRiskChange(10) = True
End Sub
当我打开编辑表单时,e14_TextChanged()
会被触发一次,即使在该文本框中没有进行任何更改,该标志也会得到true
并在编辑日志表中被保存。