【发布时间】:2017-10-07 18:54:18
【问题描述】:
我有一个主要表单(form1),它等待接收信息
Private Sub SerialPort1_DataReceived(sender As System.Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim output As String
output = SerialPort1.ReadLine()
Converter(output) 'format what was received
Submit() 'submit into db
Form3.BackgroundWorker1.RunWorkerAsync()
Thread.Sleep(2000)
Application.DoEvents()
End Sub
并将信息处理/提交到数据库中,如果 form3 已打开(该条件尚未测试,但我一直在测试时确保在通过串行端口发送数据之前打开 form3)它应该更新form3中的datagridview。
Public Class Form3
Delegate Sub dgvDelegate()
Sub fill()
tabela_dispensa.Rows.Clear()
Conectar(conn, myCommand) ' connect to db
myCommand.CommandText = "select dispensa.*,produto.Descrição from dispensa join produto on dispensa.PLU = produto.PLU"
result = myCommand.ExecuteReader
While result.Read
tabela_dispensa.Rows.Add(result(0), result(5), result(1), result(2), result(3), result(4))
End While
Desconectar(conn) ' disconnect from db
End Sub
Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
BackgroundWorker1.RunWorkerAsync()
'Conectar(conn, myCommand)
'myCommand.CommandText = "select dispensa.*,produto.Descrição from dispensa join produto on dispensa.PLU = produto.PLU"
'result = myCommand.ExecuteReader
'While result.Read
' tabela_dispensa.Rows.Add(result(0), result(5), result(1), result(2), result(3), result(4))
'End While
'Desconectar(conn)
End Sub
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
If InvokeRequired Then
Invoke(New dgvDelegate(AddressOf fill))
Else
fill()
End If
End Sub
End Class
问题是datagridview只有在加载form3时才会改变。
我已经运行了一些测试,我可以看到,在打开 form3 后,当我收到数据时,datagridview 在我做某事之前会丢失所有行,所以即使丢失数据很奇怪,datagridview 看起来也是一样的。
因此,如果有人可以帮助我更新 datagridview 会很好,但如果有人能帮助我理解为什么 datagridview 会丢失所有数据但显示的内容仍然像什么都没发生,我会很高兴。
重要: Datagridview 没有数据绑定。
如果文字有点乱,请见谅。
【问题讨论】:
标签: vb.net datagridview serial-port