Datagrid auto scroll to make last row visible

wpf scroll to bottom of datagrid
datagrid wpf autoscroll

How do you make a DataGrid always keeping the last row visible? As in automatically scrolling to the bottom when new items are added

Yes, you can use method ScrollIntoView a pass DataGrid item to this method.

XAML:

<DataGrid x:Name="DataGrid" Grid.Row="1"
          Margin="5"
          AutoGenerateColumns="True"
          ItemsSource="{Binding Path=Users}">

Code:

 private ObservableCollection<User> _users;


    public ObservableCollection<User> Users
    {
        get
        {
            return _users;
        }

        set
        {
            _users = value;
            OnPropertyChanged("Users");
        }
    }

Add new item to DataGrid:

private void BtnAdd_OnClick(object sender, RoutedEventArgs e)
{
    Users.Add(new User { Id = Guid.NewGuid().ToString(), FirstName = "Bill", LastName = "Clinton" });

    //scroll to last added item
    DataGrid.ScrollIntoView(Users[Users.Count-1]);
}

Scroll to the last row in a datagridview, I think you should try: Hide Copy Code. dataView. FirstDisplayedScrollingRowIndex = dataView.RowCount-1;. In your derived grid, add a handler for the VertScrollBar.VisibleChanged event. In your handler, if the scrollbar is not visible, size it and position it, and then show it. The code below assumes no horizontal scrollbar is necessary. If it is present, you would have to adjust the sizing code.

This is a simple approach using LoadingRow event:

void dataGrid_LoadingRow(object sender, System.Windows.Controls.DataGridRowEventArgs e)
{
    dataGrid.ScrollIntoView(e.Row.Item);
}

Just remember to disable it after grid loading is finished.

Getting DataGrid.ScollIntoView to position row at top of view area , ScrollIntoView(row, col) to programmatically scroll a row into the viewable area of my data grid. The row is positioned at the bottom of the viewable area. For scrolling a row into view and also setting it as the top/first visible row, you row further down and do a scroll to vertical offset, the row I selected is� For scrolling a row into view and also setting it as the top/first visible row, you need to use C1DataGrid's ViewPort.ScrollToVerticalOffset method and pass in row*Datagrid.RowHeight.Value as argument, as follows: _grid.Viewport.ScrollToVerticalOffset(row*_grid.RowHeight.Value); Attached is a sample application for your reference. Thanks, Ruchir

After already try many way,this is the best way:

if (datagrid.Items.Count > 0)
            {
                var border = VisualTreeHelper.GetChild(datagrid, 0) as Decorator;
                if (border != null)
                {
                    var scroll = border.Child as ScrollViewer;
                    if (scroll != null) scroll.ScrollToEnd();
                }
            }

Scrolling | WinForms Controls, In the grid View's properties, set the GridView. goes up to the GridView. RowCount value indicating that you've reached the last visible row. The row details section can also be frozen so that it does not scroll horizontally when the DataGrid is scrolled. To display a row details section using inline XAML. Create a DataTemplate that defines the appearance of the row details section. Place the DataTemplate inside the <DataGrid.RowDetailsTemplate> tags.

Simplest way:

DataGrid.SelectedIndex = DataGrid.Items.Count - 1; // If you need to select the last item
DataGrid.ScrollIntoView(DataGrid.Items[DataGrid.Items.Count - 1]);

Focus and Scroll Rows | WinForms Controls, This topic describes how to focus rows and scroll the view vertically. To learn how FocusLast — focus the first and last row, respectively. VGridControl. These methods automatically expand collapsed child rows. EditorRow. The following sample code focuses the rowPrice row if it is visible. Otherwise� Posted by Moazzam March 11, 2009 April 22, 2009 2 Comments on Scrolling a datagrid to a specific row (or to the bottom) There are 2 ways you can do this. In the first method, you can derive a class from datagrid and use the protected method GetVScroll().

WPF: how to move selected cells/rows into visible area in DataGrid?, so that most of rows in DataGrid are not visible. Since we allow to multiple selections, if both first and last row have been selected, from above when the DataGridRow container is created as you scroll the item into view. Is there a way to keep the selected row in DataGridView always visible? I keep on inserting rows at random positions in the datagridview. But always want to make sure that the selected row is within the visible area of datagridview and always visible. Any code or sample will be helpful. thanks, Ritesh.

Scrolling in Windows Forms Grid Control control, The auto scrolling can be enabled or disabled for both horizontal and vertical Also use the binary tree structures to quickly get the row index for an absolute pixel The visibility of the vertical and horizontal scrollbars of the grid can be get/ set by To notify the last row/column reached while scrolling the grid, invoke the � You have make a good point. Since we allow to multiple selections, if both first and last row have been selected, from above code, only the first row will be in visible area since the grid only allow to display 10 rows at a time. 1) Since the DataGrid only displays 96 rows. so we set "VirtualizingPanel.IsVirtualizing ="True"

Data Grid Properties | LiveCode Data Grid, Set to true if you would like the data grid to automatically handle row highlighting in Toggles the visibility of the horizontal scrollbar for a table. Finally i still have some probelms with this automatic scrolling by using a timer. I attach a code snippet of try-outs but without succes. To clarify things a little bit more: when having e.g. 36 rows in my datatable (datagrid.Rows.Count) the 4 first iterations (with a DisplayedRowCount(false) of 8) take more or less the correct

Comments
  • Only comment as have not used it in DataGrid but there is BringIntoView method that you would call on the last row.
  • Yes I know I can do so in code in various ways but I was wondering if there is a setting to "auto track"
  • Thanks for showing me how to Add items to a collection, raising property changed and MANUALLY scrolling. I was after some setting on the grid to AUTOMATICALLY do this WITHOUT writing ugly code like this.
  • @Magnus Ahlin: If you use for example MVVM you can create own DataGrid and call this method inside. I think DataGrid from WPF does not have property for this purpose.
  • You could wrap this code into a behavior that does that every time an item is added.
  • "Just remember to disable it after grid loading is finished" And how is that done?