Search code examples
c#winformsdatagrid

How can I set the position of my datagrid scrollbar in my winforms app?


In my C# winforms app, I have a datagrid. When the datagrid reloads, I want to set the scrollbar back to where the user had it set. How can I do this?

EDIT: I'm using the old winforms DataGrid control, not the newer DataGridView


Solution

  • You don't actually interact directly with the scrollbar, rather you set the FirstDisplayedScrollingRowIndex. So before it reloads, capture that index, once it's reloaded, reset it to that index.

    EDIT: Good point in the comment. If you're using a DataGridView then this will work. If you're using the old DataGrid then the easiest way to do that is to inherit from it. See here: Linkage

    The DataGrid has a protected GridVScrolled method that can be used to scroll the grid to a specific row. To use it, derive a new grid from the DataGrid and add a ScrollToRow method.

    C# code

    public void ScrollToRow(int theRow)
    {
        //
        // Expose the protected GridVScrolled method allowing you
        // to programmatically scroll the grid to a particular row.
        //
        if (DataSource != null)
        {
            GridVScrolled(this, new ScrollEventArgs(ScrollEventType.LargeIncrement, theRow));
        }
    }