Datagridview滚动条在每间隔时间用定时器更新内容时返回

Datagridview Scroll bar going back when content updated with timer every interval

我正在从文本文件读取数据到数据网格视图(在运行时创建),用逗号分隔。我的文本文件数据实际上是我的进程的事件日志,包含时间戳和每 3 或 4 秒动态更新一次的状态。我需要在 datagridview 中显示动态更新的数据。当使用计时器间隔更新数据时,滚动条会回到顶部位置,我无法按住它向下滚动。谁能帮我解决这个问题?

我要阅读的代码:

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Me.Controls.Add(DataGrid1)
    DataGrid1.Left = 50
    DataGrid1.Top = 50
    DataGrid1.Width = Me.Width - 100
    DataGrid1.Height = Me.Height - 200
    lblError.Top = Me.Height - 150
    lblError.Left = 50
    Application.DoEvents()
    Try

        DataGrid1.Rows.Clear()
        DataGrid1.Columns.Clear()
        If System.IO.File.Exists("D:\Evntlog.txt") = False Then
           CreateSampleFile()
        End If
        'Opening the text file
        Dim objReader As New System.IO.StreamReader("D:\Evntlog.txt")
        Dim HeaderLine As String = ""
        Dim ColHeaders As Array
        Dim NrOfCols As Integer = 0
        Dim TextLine As String = ""
        Dim Items As Array

        If System.IO.File.Exists("D:\Evntlog.txt") = True Then
            If CbxLoadHeaders.Checked = True Then

                HeaderLine = objReader.ReadLine()
                ColHeaders = Split(HeaderLine, txtColumnSeperator.Text)
                NrOfCols = UBound(ColHeaders)
                For Each value In ColHeaders
                    Dim col As New DataGridViewTextBoxColumn

                    col.DataPropertyName = value
                    col.HeaderText = value
                    col.Name = value
                    DataGrid1.Columns.Add(col)
                Next
            Else

                Dim ColReader As New System.IO.StreamReader("D:\Evntlog.txt")
                Dim DColumns As String = ColReader.ReadLine()
                Dim ColumnSplit = Split(DColumns, txtColumnSeperator.Text)
                NrOfCols = UBound(ColumnSplit)
                ColReader.Dispose()
                ColReader.Close()
                For x = 0 To NrOfCols
                    Dim col As New DataGridViewTextBoxColumn
                    col.DataPropertyName = "dgvColumn_" & Trim(x.ToString)
                    col.HeaderText = "Column " & Trim(x.ToString)
                    col.Name = "dgvColumn_" & Trim(x.ToString)
                    DataGrid1.Columns.Add(col)
                Next
            End If
            Do While objReader.Peek() <> -1
                TextLine = objReader.ReadLine()

                If Trim(TextLine) <> "" Then

                    Items = Split(TextLine, txtColumnSeperator.Text)

                    Dim n As Integer = DataGrid1.Rows.Add()

                    Dim UsedColumns As Integer = 0
                    If DataGrid1.Columns.Count > UBound(Items) + 1 Then
                        UsedColumns = UBound(Items)
                    Else
                        UsedColumns = DataGrid1.Columns.Count - 1
                    End If
                    For x = 0 To UsedColumns

                        DataGrid1.Rows.Item(n).Cells(x).Value = Items(x)
                    Next x
                End If
            Loop
        End If
        objReader.Close()
        objReader.Dispose()
    Catch ex As Exception
        Debug.Print(ex.ToString)
        DataGrid1.Rows.Clear()
        lblError.Text = ex.Message
        lblError.Visible = True
    End Try
End Sub

您将不得不自己记住当前显示的行,然后手动滚动到它。

' Save the currently displayed row index.
Dim prevIndex As Integer = DataGridView1.FirstDisplayedScrollingRowIndex

' Update the data.
...

' Scroll to the previously displayed row.
DataGridView1.FirstDisplayedScrollingRowIndex = prevIndex