How to prevent default F2 and up/down arrow key behavior for editable cells

How do I prevent the default F2 and up/down arrow key behavior for cells that are editable in a DataGrid? I do not want F2 to start editing. Furthermore, I have a custom template column with a custom dropdown component, and when the dropdown is open, I do not want the up/down arrows to cycle through the cells of the grid.


Additionally, when I am in a cell with a custom dropdown component, I want when I start typing to focus the innermost custom component and start editing, like it would for another normal cell.


3 Replies

SB Sweatha Bharathi Syncfusion Team February 13, 2026 10:01 AM UTC

Hi Josepth Badrouk,


Query 1: To disable F2 from starting editing


To achieve your requirement, you can customize the GridSelectionController and override the ProcessKeyDown method. In that method, handle and return without calling the base implementation when the F2 key is pressed. This will prevent editing when the F2 key is pressed.


Code snippet to prevent editing when F2 key is pressed:

public class GridCellSelectionControllerExt : GridSelectionController

{

    public GridCellSelectionControllerExt(SfDataGrid grid)

    : base(grid)

    {

    }

 

    protected override void ProcessKeyDown(KeyEventArgs args)

    {

        if (args.Key == Key.F2)

            return;

        base.ProcessKeyDown(args);

    }

}


Query 2: I do not want the up/down arrow keys to cycle through the grid cells.


We have used ComboBox as the edit element for the dropdown. When the dropdown is open and press the up/down arrow keys, the focus moves within the ComboBox dropdown list. It does not move through the cells of the grid.

We have provided a sample for your reference. Kindly review the sample and response to the below queries:

1.Could you please confirm whether you are able to reproduce the same issue in our provided sample? 2.Could you please confirm which control you are using for the dropdown scenario?
3.Could you please confirm whether any customization is required to reproduce your scenario?

4. Kindly provide a video or modify the provided sample to demonstrate the issue.

This information will help us proceed further and provide an accurate solution.

Query 3: Start typing to focus the innermost custom component


By default, when pressing any key in columns other than GridTemplateColumn, GridCheckBoxColumn, GridImageColumn, GridHyperlinkColumn, and GridUnboundColumn, the cell enters the edit state automatically.

To achieve the same behavior for GridTemplateColumn, you can create a custom DataGrid by inheriting from SfDataGrid, then override the OnTextInput method. Inside this method, check whether the current column is a GridTemplateColumn and then call the BeginEdit method.


Code snippet to load edit element when start typing:

public class SfDataGridExt : SfDataGrid

 {

     public SfDataGridExt() : base()

     {

     }

     protected override void OnTextInput(TextCompositionEventArgs e)

     {

         if (!SelectionController.CurrentCellManager.HasCurrentCell)

         {

             base.OnTextInput(e);

             return;

         }

         var rowColumnIndex = SelectionController.CurrentCellManager.CurrentRowColumnIndex;

         var dataRow = this.RowGenerator.Items.FirstOrDefault(item => item.RowIndex == rowColumnIndex.RowIndex);

         if (dataRow != null && dataRow is DataRow)

         {

             var dataColumn = dataRow.VisibleColumns.FirstOrDefault(column => column.ColumnIndex == rowColumnIndex.ColumnIndex);

             if (dataColumn != null && (dataColumn.GridColumn is GridTemplateColumn) && !dataColumn.IsEditing)

                 SelectionController.CurrentCellManager.BeginEdit();

         }

         base.OnTextInput(e);

     }

 }


Find the sample demo in the attachment and let us know if you have any concerns on this.


Regards,

Sweatha B


Attachment: Sample_fc04e006.zip


JB Josepth Badrouk February 13, 2026 02:43 PM UTC

I do have a selection controller but it seems like it is not firing when both NavigationMode and SelectionUnit are set to Cell. If I change them to Row, the selection controller works. However, I need them to be Cell. How can I get around this?



SB Sweatha Bharathi Syncfusion Team February 16, 2026 05:55 AM UTC

Josepth Badrouk,

We have reviewed your query. When performing cell selection, you need to inherit the GridCellSelectionController. For row selection, you need to inherit the GridSelectionController.

Code snippet to prevent editing when F2 key is pressed when using cell selection:

 public class GridCellSelectionControllerExt : GridCellSelectionController
 {
     public GridCellSelectionControllerExt(SfDataGrid grid)
     : base(grid)
     {
     }

     protected override void ProcessKeyDown(KeyEventArgs args)
     {
         if (args.Key == Key.F2)
             return;
         base.ProcessKeyDown(args);
     }
 }

Find the modified demo in the attachment and let us know if you have any concerns on this.

Attachment: Sample_d036049.zip

Loader.
Up arrow icon