DataViewBase.FocusedRowHandleChanging Event
Occurs when the focused row handle is about to change.
Namespace: DevExpress.Xpf.Grid
Assembly: DevExpress.Xpf.Grid.v24.2.Core.dll
NuGet Package: DevExpress.Wpf.Grid.Core
#Declaration
#Event Data
The FocusedRowHandleChanging event's data class is FocusedRowHandleChangingEventArgs. The following properties provide information specific to this event:
Property | Description |
---|---|
Handled |
Gets or sets a value that indicates the present state of the event handling for a routed event as it travels the route.
Inherited from Routed |
Navigation |
Gets the user action that leads to focus change. |
New |
Gets or sets the handle of the row that gets focus. |
Old |
Gets the handle of the previously focused row. |
Original |
Gets the original reporting source as determined by pure hit testing, before any possible Source adjustment by a parent class.
Inherited from Routed |
Routed |
Gets or sets the Routed |
Source | Gets the view that raised this event. |
The event data class exposes the following methods:
Method | Description |
---|---|
Invoke |
When overridden in a derived class, provides a way to invoke event handlers in a type-specific way, which can increase efficiency over the base implementation.
Inherited from Routed |
On |
When overridden in a derived class, provides a notification callback entry point whenever the value of the Source property of an instance changes.
Inherited from Routed |
#Remarks
The following code sample does not allow users to focus rows if their CanFocus property is set to false
:
private void OnFocusedRowHandleChanging(object sender, FocusedRowHandleChangingEventArgs e) {
var grid = (GridControl)e.Source.DataControl;
switch (e.NavigationType) {
case NavigationType.Prev:
case NavigationType.Last:
e.NewRowHandle = GetNextRowHandle(grid, e.NewRowHandle, x => e.Source.GetPrevRowHandle(x)) ?? e.OldRowHandle;
break;
case NavigationType.Next:
case NavigationType.First:
e.NewRowHandle = GetNextRowHandle(grid, e.NewRowHandle, x => e.Source.GetNextRowHandle(x)) ?? e.OldRowHandle;
break;
default:
e.NewRowHandle = CanFocus(grid, e.NewRowHandle) ? e.NewRowHandle : e.OldRowHandle;
break;
}
}
static int? GetNextRowHandle(GridControl grid, int rowHandle, Func<int, int> getNextRowAction) {
if (rowHandle == DataControlBase.AutoFilterRowHandle || rowHandle == DataControlBase.NewItemRowHandle)
return rowHandle;
int nextRowHandle = rowHandle;
while (grid.IsValidRowHandle(nextRowHandle)) {
if (CanFocus(grid, nextRowHandle))
return nextRowHandle;
nextRowHandle = getNextRowAction(nextRowHandle);
}
return null;
}
static bool CanFocus(GridControl grid, int rowHandle) {
return rowHandle < 0 || ((Item)grid.GetRow(rowHandle)).CanFocus;
}
Refer to the following help topics for more information: Identify Rows and Cards, Iterate Through Rows and Cells in Code.