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
我正在从文本文件读取数据到数据网格视图(在运行时创建),用逗号分隔。我的文本文件数据实际上是我的进程的事件日志,包含时间戳和每 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