2017-02-02 16 views
0

У меня есть DataGridView, что я непрерывно заполняю добавление строк с помощью BackgroundWorker.Форма Windows: отключить автопрокрутку на DataGridView

Проблема заключается в том, что, хотя каждая строка добавлена ​​в нижней части DataGridView, полоса прокрутки продолжает двигаться вверх, вместо того, чтобы оставаться на том же месте, в котором я ее переместил раньше.

Как я могу отключить автопрокрутку, чтобы сохранить DataGridView на том же месте, в то время как новые строки добавлены внизу?

+0

Этот вопрос был задан до и имеет ответы: [Сохранить и сброс первой отображаемой строки] (http://stackoverflow.com/a/39935694/6664878) или [Override RowChanged событие] (HTTP : //stackoverflow.com/a/1521507/6664878) ... вы пробовали любой из них? – soohoonigan

ответ

0

Я обычно делаю это с ListView, и я уверен, что DataGridView будет работать так же:

If ListView1.Items.Count > 0 Then 

    ListView1.Items.Item(ListView1.Items.Count -1).EnsureVisible() 

End If 

Это гарантирует, что ваша последняя запись видна.

0

Событие DataGridView1_Scroll для получения определенной позиции прокрутки. как показано ниже -

Dim savedScrollPosition As Integer = 0 
    Private Sub DataGridView1_Scroll(sender As Object, e As System.Windows.Forms.ScrollEventArgs) Handles DataGridView1.Scroll 
    savedScrollPosition = e.NewValue 
End Sub 

Затем вы можете присвоить это DataGridView собственности FirstDisplayedScrollingRowIndex после добавления новой строки. как показано ниже -

Public Class Form1 

Dim i As Integer = 1 
Dim savedScrollPosition As Integer = 0 

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
    Dim timer As New Timer() 
    timer.Interval = 1000 
    AddHandler timer.Tick, AddressOf timer_Tick 
    timer.Start()  
End Sub 

Private Sub timer_Tick(ByVal sender As Object, ByVal e As EventArgs) 
    UpdateDGV() 
    i = i + 1 
End Sub 

Private Sub UpdateDGV() 
    DataGridView1.ColumnCount = 2 
    DataGridView1.Columns(0).Name = "Product_Name" 
    DataGridView1.Columns(1).Name = "Product_Price" 

    Dim row As String() = New String() {"Product # " + Convert.ToString(i), 1000 + i} 
    DataGridView1.Rows.Add(row) 

    'Keep your scrollbar at specific position 
    DataGridView1.FirstDisplayedScrollingRowIndex = savedScrollPosition 

    'keep your scrollbar at bottom of the grid 
    'DataGridView1.FirstDisplayedScrollingRowIndex = DataGridView1.RowCount - 1 

End Sub 

Private Sub DataGridView1_Scroll(sender As Object, e As System.Windows.Forms.ScrollEventArgs) Handles DataGridView1.Scroll 
    savedScrollPosition = e.NewValue 
End Sub 
End Class