質問

仮想モードDataGridViewの行位置を変更する方法

Windowsフォームを使用しています。

役に立ちましたか?

解決

Marcusの答えは正しいですが、DataGridViewの現在のセルプロパティを設定する必要があるかもしれません...

dgv.CurrentCell = dgv.Rows[0].Cells[0];

これでグリッドがスクロールすると思います。また、完全に安全にするために、他のコード行の前にこれを追加することもできます...

dgv.CurrentCell = null;

これにより、目的の行がすでにアクティブな行であり、ビューの外にスクロールされている場合、スクロールして表示されます。

他のヒント

古い位置をクリアして新しい位置を設定する必要があります

コレクションdataGridView1.SelectedRowsには、現在選択されている行があります。グリッドのMultiSelectプロパティによっては、SelectedRows内のすべての行をループして、それらを未選択としてマークする必要があります。単一選択モードの場合、新しい行を選択済みとして設定するだけで、古い選択がクリアされます。

特定の行(この場合はインデックス0の行)を選択するには、次の行を追加します。    dataGridView1.Rows [0] .Selected = true;

選択した行だけでなく、表示されている行も設定する必要があるようです。 DataGridViewの FirstDisplayedScrollingRowIndex プロパティで後者にアクセスできます。便利なセットアップの1つ:

int lastShown = FirstDisplayedScrollingRowIndex + DisplayedRowCount(false) - 2;

if (lastShown < yourIndex)
  FirstDisplayedScrollingRowIndex += yourIndex - lastShown;
else if (FirstDisplayedScrollingRowIndex > yourIndex)
  FirstDisplayedScrollingRowIndex = yourIndex;

プログラムで上下にスクロールするときに、新しく選択した行が画面から消えないようにします。

Else
        If i = rowcount Then
            Me.GridSaleItem.CurrentCell = Me.GridSaleItem.Rows(i - 1).Cells(0)
            Me.GridSaleItem.Rows(i - 1).Selected = True
        End If
    End If
Next
Private Sub GridSaleItem_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridSaleItem.SelectionChanged
    Dim rowcount As Integer
    rowcount = GridSaleItem.Rows.Count
    For i As Integer = 1 To rowcount
        If i = 1 Then
            '
        Else
            If i = rowcount Then
                Me.GridSaleItem.CurrentCell = Me.GridSaleItem.Rows(i - 1).Cells(0)
                Me.GridSaleItem.Rows(i - 1).Selected = True
            End If
        End If
    Next

End Sub
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top