Quantcast
Channel: Windows Presentation Foundation (WPF) forum
Viewing all articles
Browse latest Browse all 18858

WPF Datagrid Cell Focus Issue after commiting data

$
0
0

I have datagrid which has SelectionUnit = FullRow.
When I clcik on cell, it goes to edit mode and without updation if I press Escape key. it came out
from edit mode but still it has focus (dotted line)

But If I update data and then press Escape key, it basically commit data using (CellEditEnding event)
and then when I try to set focus to that cell from code, it didnot work, whole datagrid looses focus.

see my code below.

//CommitEdit code when I press Escape after updating data

 void DataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
        {
            if (!_isManualEditCommit)
            {
                _isManualEditCommit = true;
                DataGrid grid = (DataGrid)sender;
                grid.CommitEdit(DataGridEditingUnit.Row, true);
                isManualEditCommit = false;
            }        
        } 

void RhinoDataGrid_Loaded(object sender, RoutedEventArgs e)
{

     RoutedEventHandler CellFocusedChangedHandler = new RoutedEventHandler(FocusChangedHandler);
    AddHandler(DataGridCell.GotKeyboardFocusEvent, CellFocusedChangedHandler);
}

// Setting focus back to cell after updating data using Escape key

private void FocusChangedHandler(object sender, RoutedEventArgs args)
        {
            if (args.RoutedEvent.RoutingStrategy == RoutingStrategy.Bubble)
            {
                FrameworkElement DataGridCellObj = args.OriginalSource as FrameworkElement;
               if (Keyboard.IsKeyDown(Key.Escape))
                {
                    if (DataGridCellObj != null)
                    {
                        DataGridCell dgCell = DataGridCellObj as DataGridCell;
                        if (dgCell != null && !dgCell.IsEditing && !dgCell.IsReadOnly)
                        {
                            if (!dgCell.IsFocused)
                            {
                                dgCell.Focus();
                            }
                            DataGridRow dr = VisualTreeHelpers.FindVisualParent<DataGridRow>(dgCell);
                            int rIndex = ((DataView)this.ItemsSource).Table.Rows.IndexOf(((DataRowView)(dr.Item)).Row);
                            DataGridCellInfo dgCellInfo = new DataGridCellInfo(this.Items[rIndex], dgCell.Column);
                            if (dgCellInfo != null)
                            {
                                FocusManager.SetIsFocusScope(dgCell, true);
                                FocusManager.SetFocusedElement(dgCell, dgCell);
                                dgCell.BorderThickness = new Thickness(7);
                            }
                        }
                    }
                }
            }

        }

Pls help 

Thanks

Dee


Viewing all articles
Browse latest Browse all 18858

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>