2017-02-02 6 views
0

Ich habe eine DataGridView, die ich kontinuierlich Zeilen mit einer BackgroundWorker füllen füllen.Windows Form: Deaktivieren Sie Autoscrolling auf DataGridView

Das Problem ist, dass, obwohl jede Zeile auf der Unterseite der DataGridView hinzugefügt wird die Scrollbar weiter nach oben statt an der gleichen Stelle, in der ich es zuvor bewegt.

Wie kann ich deaktivieren die Autoscrolling, um die DataGridView auf der gleichen Stelle zu halten, während neue Zeilen an der Unterseite hinzugefügt werden?

+0

Diese Frage vor und hat Antworten gefragt wurde: [Speichern und erste angezeigte Zeile zurücksetzen] (http://stackoverflow.com/a/39935694/6664878) oder [Überschreiben RowChanged Event] (http : //stackoverflow.com/a/1521507/6664878) ... hast du beides versucht? – soohoonigan

Antwort

0

ich tue dies in der Regel mit einem ListView und ich bin sicher, dass ein DataGridView ähnlich funktionieren würde:

If ListView1.Items.Count > 0 Then 

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

End If 

Dadurch wird sichergestellt, dass Ihr letzter Eintrag sichtbar ist.

0

Sie können das Ereignis DataGridView1_Scroll zum Abrufen der spezifischen Bildlaufposition verwenden. unten wie -

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 

Dann können Sie diese auf Datagridview-Eigenschaft zuweisen FirstDisplayedScrollingRowIndex nach neuen Zeile hinzugefügt wird. unten wie -

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 
Verwandte Themen