DataGridView:只有当滚动在底部时才自动向下滚动

本文关键字:滚动 DataGridView 底部 | 更新日期: 2023-09-27 18:11:17

我有一个使用dataGridView的程序,通过向dataGridView添加行来显示每秒自动更新的数据。

当我想要阅读开头的内容时,我向上滚动,即使数据更新,滚动条也不会向下滚动,这很好。但是我希望滚动条只在dataGridView底部时才向下。

当新行添加到文本中时,我想要的行为:

如果滚动条在底部,自动向下滚动。如果滚动条在其他位置,则不要滚动。

我为此编写的代码不幸不起作用是:

 private void liveDataTable_Scroll(object sender, ScrollEventArgs e)
 {
    ScrollPosition = liveDataTable.FirstDisplayedScrollingRowIndex; 
    if (ScrollPosition == liveDataTable.RowCount - 1)
    {
       IsScrolledToBottom = true;
    }
    else
    {
       IsScrolledToBottom = false;
    }            
 }
 public void AddRowToDataGridMethod()
 {
    dataTable.Rows.Add();
    if (dataWin.IsScrolledToBottom == true)
         dataWin.LiveDataTable.FirstDisplayedScrollingRowIndex = (dataWin.ScrollPosition + 1);
    else
         dataWin.LiveDataTable.FirstDisplayedScrollingRowIndex = dataWin.ScrollPosition;         
 }

DataGridView:只有当滚动在底部时才自动向下滚动

你可以试试:

int firstDisplayed = liveDataTable.FirstDisplayedScrollingRowIndex;
int displayed = liveDataTable.DisplayedRowCount(true);
int lastVisible = (firstDisplayed + displayed) - 1;
int lastIndex = liveDataTable.RowCount - 1;
liveDataTable.Rows.Add();  //Add your row
if(lastVisible == lastIndex)
{
     liveDataTable.FirstDisplayedScrollingRowIndex = firstDisplayed + 1;
}

检查最后一行是否可见以及添加新行后是否向下滚动一行。

只是想添加,另一个方法来保持滚动(但在底部的新行)是…

基本上它的作用是说你有10行显示并且你正在处理每一行。当它到达第11行时,它向上滚动1行,所以你的行现在显示在底部。例如,你可以添加1,现在它将保持你的行+ 1,所以它在底部的最后一行旁边。

if (myRow.Displayed == false)
{
  int intDisplayRows = myRow.Index - dataView_Database.DisplayedRowCount(false);
  dataView_Database.FirstDisplayedScrollingRowIndex = intDisplayRows;
}
 private void dgZavod_RowsAdded_1(object sender, DataGridViewRowsAddedEventArgs e) {
     dgZavod.FirstDisplayedScrollingRowIndex = dgZavod.Rows[dgZavod.Rows.Count - 1].Index;
 }