我有一个程序,它使用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;
}
答案 0 :(得分:12)
你可以试试这个:
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;
}
因此,基本上检查最后一行是否可见,以及在添加新行后是否向下滚动1行。
答案 1 :(得分:1)
只是想添加,另一种让它滚动的方法(但底部有新行)是......
基本上这就是说你有10行显示,你正在处理每一行。当它到达第11行时,它会向上滚动1行,因此您的行现在显示在底部。例如,您可以添加1,现在它将保持您的行+ 1,因此它位于底部最后一行的旁边。
if (myRow.Displayed == false)
{
int intDisplayRows = myRow.Index - dataView_Database.DisplayedRowCount(false);
dataView_Database.FirstDisplayedScrollingRowIndex = intDisplayRows;
}