Articles in this section
Category / Section

How to move the current cell to the first column of the add new row in UWP DataGrid?

2 mins read

In the SfDataGrid, when the Tab Key is pressed from the last column of the AddNewRow, the values are committed and the CurrentCell remains in the last column of the AddNewRow. To change this behavior and move the CurrentCell to the first column of the AddNewRow, change the Tab key’s behavior by overriding the GridSelectionController class and setting it to the SfDataGrid.SelectionController property.

The following code example shows how to set the instance of overriding the GridSelectionController class to the SfDataGird.SelectionController property.

C#

public MainWindow()
{
    InitializeComponent();
    this.sfdatagrid.SelectionController = new CustomSelectionController(sfdatagrid);
}

 

The following code example explains how to override the GridCellSelectionController class. Here, you need to override the ProcessKeyDown method. Within this method, you can move the CurrentCell to the first column of the AddNewRow by using the GridSelectionController.MoveCurrentCell method.

C#

public class CustomSelectionController : GridSelectionController
{
    public CustomSelectionController(SfDataGrid dataGrid)
        : base(dataGrid)
    {
    }
 
   protected override void ProcessKeyDown(KeyEventArgs args)
        {
            // Get the CurrentCell column index
            var currentColumnIndex = this.CurrentCellManager.CurrentRowColumnIndex.ColumnIndex;
            // Get last column index of the SfDataGrid through the SelectionHelper
            var lastIndex = SelectionHelper.GetLastColumnIndex(DataGrid);
            base.ProcessKeyDown(args);
           
            bool isAddNewRow = DataGrid.IsAddNewIndex(CurrentCellManager.CurrentRowColumnIndex.RowIndex);
            if (SelectionHelper.CheckShiftKeyPressed())
                return;
            if (args.Key == Key.Tab && isAddNewRow && this.DataGrid.AddNewRowPosition == AddNewRowPosition.Bottom)
            {
                var rowIndex = this.CurrentCellManager.CurrentRowColumnIndex.RowIndex;
                var firstFocusedColumnIndex = GetFirstFocusedColumnIndex();
                var columnIndex = currentColumnIndex == lastIndex ? GetNextFocusedColumnIndex(0) : GetNextFocusedColumnIndex(currentColumnIndex);
                if (columnIndex == firstFocusedColumnIndex && this.DataGrid.View.IsAddingNew)
                {
                    this.CommitAddNew();
                    rowIndex = (GridHelper.GetAddNewRowController(this.DataGrid) as GridAddNewRowController).GetAddNewRowIndex();
                }
                this.MoveCurrentCell(new RowColumnIndex(rowIndex,columnIndex));
                this.DataGrid.ScrollInView(this.CurrentCellManager.CurrentRowColumnIndex);
            }
            
        }
        //Get the First Focused Column Index
        private int GetFirstFocusedColumnIndex()
        {
            int temp = 0;
            var dataColumn = SelectionHelper.GetDataColumnBase(this.DataGrid, new RowColumnIndex(this.CurrentCellManager.CurrentRowColumnIndex.RowIndex, temp));
 
            while (dataColumn != null && (!dataColumn.GridColumn.AllowFocus || dataColumn.GridColumn.IsHidden))
            {
                temp++;
                dataColumn = SelectionHelper.GetDataColumnBase(this.DataGrid, new RowColumnIndex(this.CurrentCellManager.CurrentRowColumnIndex.RowIndex, temp));
                if (dataColumn == null)
                {
                    temp = 0;
                    dataColumn = SelectionHelper.GetDataColumnBase(this.DataGrid, new RowColumnIndex(this.CurrentCellManager.CurrentRowColumnIndex.RowIndex, temp));
                }
            }
 
            return this.DataGrid.ResolveToScrollColumnIndex(temp);
        }
 
       
        //Get the Next Focused Index when Move to new line
        public int GetNextFocusedColumnIndex(int index)
        {
            int temp = 0;
            temp = index + 1;
            var dataColumn = SelectionHelper.GetDataColumnBase(this.DataGrid, new RowColumnIndex(this.CurrentCellManager.CurrentRowColumnIndex.RowIndex, temp));
           
            while (dataColumn != null && (!dataColumn.GridColumn.AllowFocus || dataColumn.GridColumn.IsHidden))
            {
                temp++;
                dataColumn = SelectionHelper.GetDataColumnBase(this.DataGrid, new RowColumnIndex(this.CurrentCellManager.CurrentRowColumnIndex.RowIndex, temp));
                if (dataColumn == null)
                {
                    temp = 0;
                    dataColumn = SelectionHelper.GetDataColumnBase(this.DataGrid, new RowColumnIndex(this.CurrentCellManager.CurrentRowColumnIndex.RowIndex, temp));
                }
            }
          
            return this.DataGrid.ResolveToScrollColumnIndex(temp);
        }     }
}

 

 

Note:

You need to override the GridCellSelectionController class when the SelectionUnit is the GridSelectionUnit.Cell.

 

 

Sample Links:

 

WPF

 

WRT

 

UWP


Conclusion

I hope you enjoyed learning about how to move the current cell to the first column of the add new row

You can refer to our UWP DataGrid feature tour page to know about its other groundbreaking feature representations and documentation, and how to quickly get started for configuration specifications. You can also explore our UWP DataGrid example to understand how to create and manipulate data.

For current customers, you can check out our components from the License and Downloads page. If you are new to Syncfusion, you can try our 30-day free trial to check out our other controls.

If you have any queries or require clarifications, please let us know in the comments section below. You can also contact us through our support forumsDirect-Trac, or feedback portal. We are always happy to assist you!

 

Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments (0)
Please sign in to leave a comment
Access denied
Access denied