2013-04-28 32 views
5

dataGridViewに行を追加することで、毎秒自動的に更新されるデータを表示するためのdataGridViewを使用するプログラムがあります。DataGridView:スクロールが最下部にある場合にのみスクロールします。

冒頭で何かを読んでいたら、スクロールアップし、データが更新されてもスクロールバーが下がらなくてもいいです。しかし、私はスクロールバーが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; 
} 

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;   
} 
+1

この質問を見てみましょう:http://stackoverflow.com/questions/378330/how-can-i-set-the-position-of-my-datagrid-scrollbar-in- my-winforms-app あなたの問題を解決するはずです。 – jAC

+0

[C#DataGridViewの下部にスクロール]の複製が可能です(http://stackoverflow.com/questions/9969061/scroll-to-bottom-of-c-sharp-datagridview) –

答えて

12

あなたはこれを試すことができます新しい行を追加した後、1行下にスクロールします。

+0

ありがとうm8! – olegoro

1

ただ、(しかし、一番下に新しい行を持つ)され、スクロール、それを維持するための別の方法を追加したい...

基本的にこれが何をあなたが10行を表示していますし、あなたがそれぞれの行を処理していると言っています。 11行目になると1行上にスクロールして、今度は行が表示されますが、下部に表示されます。たとえば1を追加すると、行+ 1のままになりますので、最後の行の下にあります。

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