【发布时间】:2021-02-15 03:35:30
【问题描述】:
我在 VB.Net 中的应用在 datagridview 中从 MS Access 加载数据(与 BindingSource 绑定,但如果是 DataTable,结果/问题是相同的)。
Private Sub LecturesPrestations()
Dim myConnection = New OleDbConnection(S7ConnString)
Try
myConnection.Open()
Requete = "SELECT s.ID, u.Nom, s.DatePresta, s.TimeIn, s.TimeOut, IIF(s.TimeOut IS NULL, NULL, CDATE(s.TimeOut - s.TimeIn)) AS Duree, s.Description " &
"FROM SAV_Prestas AS s " &
"INNER JOIN Users AS u ON u.ID = s.UserID " &
"WHERE s.NumRMA = " & monRetour.ID & ";"
Call GetBindingSource(Requete, bsPrestas, RequeteOK)
If Not RequeteOK Then
MsgBox("Problème de lecture des données",, "Chargement des prestations")
Else
With Me.dgvPresta
.DataSource = bsPrestas
...
然后我们可以通过显式访问指令(INSERT、DELETE、UPDATE...)在此 dgv 中插入、删除或修改一行。然后刷新(重新加载)dgv,以包含这些修改。
Private Sub tsmiSuppression_Click(sender As Object, e As EventArgs) Handles tsmiSuppression.Click
If dgvPresta.CurrentCell IsNot Nothing Then
Requete = "DELETE * FROM SAV_Prestas WHERE ID = " & CInt(dgvPresta.Item("ID", dgvPresta.CurrentCell.RowIndex).Value.ToString)
RequeteSQL(Requete, RequeteOK)
If Not RequeteOK Then
MsgBox("La prestation n'a pas pu être supprimée.")
Else
Call LecturesPrestations()
End If
Else
MsgBox("Sélectionnez une prestation.", vbOKOnly, vbInformation)
End If
End Sub
Public Sub RequeteSQL(ByVal Request As String, ByRef Resultat As Boolean, Optional ByRef MsgErreur As String = Nothing)
Dim myConnection = New OleDb.OleDbConnection(S7ConnString)
Try
myConnection.Open()
Dim myCommand = New OleDbCommand(Request, myConnection)
myCommand.ExecuteNonQuery()
Resultat = True
Catch ex As Exception
Resultat = False
MsgErreur = ex.Message
Finally
myConnection.Close()
End Try
End Sub
这样dgv不会显示修改的数据(例如:删除的数据仍然出现)。只有在新的“刷新”几秒钟后才会出现修改。
您知道出了什么问题以及如何解决这个问题吗?
谢谢。
【问题讨论】:
-
在 RequeteSQL 中会发生什么? RequeteOK 在哪里设置为 True?
Call LecuresPrestations()运行吗? -
我已经修改了我的帖子以包含 RequeteSQL。 GetBindingSource 和 RequeteSQL 都返回 True 的 RequeteOK。所以 LecturePrestations 正在重新加载。
标签: vb.net ms-access datagridview insert refresh