2017-02-02 22 views
0

我有一個DataGridView,我不斷填充添加行BackgroundWorker窗體:禁用DataGridView上的自動滾動

問題是,即使在DataGridView的底部添加了每一行,滾動條仍繼續向上移動,而不是在我之前移動它的相同位置上保持 。

我怎樣才能禁用自動滾動保持DataGridView在同一地點,而新的行添加在底部?

+0

這個問題以前有人問及有答案:[保存和重置第一行顯示(http://stackoverflow.com/a/39935694/6664878)或[覆蓋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