【问题标题】:Datagridview data that is shown is different from the data that the datagriview has显示的 Datagridview 数据与 datagriview 具有的数据不同
【发布时间】: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


    【解决方案1】:

    在填充数据网格时尝试包括这些(将 DataGridView1 替换为您的任何名称)

            DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
            DataGridView1.AutoGenerateColumns = True
            Application.DoEvents()
    

    【讨论】:

    • 一样,没有区别
    【解决方案2】:

    这个方法对我有用..

    Dim command As String
    DataGridView1.Columns.Clear()
    Dim ds As New DataSet
    Try
        Using connection As New SqlConnection(conString)
        command = "Your SQL Query"
        connection.Open()
        Dim da As New SqlDataAdapter(command, connection)
        connection.Close()
        ds.Tables.Add("ProductDetails")
        da.Fill(ds, "ProductDetails")
    End Using
    DataGridView1.DataSource = ds.Tables("ProductDetails")
    DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
    DataGridView1.AutoGenerateColumns = True
    Application.DoEvents()
    

    【讨论】:

    • 我已经尝试过但还是没有工作我不认为它与我与 db 的连接有关form1 上的 SerialPort1.DataReceived 事件调用 backgroundworker
    猜你喜欢
    • 2011-07-31
    • 2016-10-12
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多