ListViewProcessCurrentObjectController.CustomProcessSelectedItem Event
Occurs before the ListViewShowObject Action (ListViewProcessCurrentObjectController.ProcessCurrentObjectAction) is executed in List Views with MasterDetailMode set to ListViewOnly.
Namespace: DevExpress.ExpressApp.SystemModule
Assembly: DevExpress.ExpressApp.v24.1.dll
NuGet Package: DevExpress.ExpressApp
Declaration
Event Data
The CustomProcessSelectedItem event's data class is DevExpress.ExpressApp.SystemModule.CustomProcessListViewSelectedItemEventArgs.
Remarks
When a user clicks an object in the current List View (double click in Windows Forms) or selects an object and presses Enter, XAF executes the ListViewShowObject Action. This Action invokes a Detail View for the selected object. Handle the CustomProcessSelectedItem
event to execute a custom Action instead of the ListViewShowObject Action in specific List Views. For example, the Windows Forms ReportsController invokes the Report Designer, and both the ASP.NET Web Forms ReportsController and the ASP.NET Core Blazor ReportsController invoke the Report Viewer instead of a Detail View. When you handle the CustomProcessSelectedItem
event, set the CustomProcessListViewSelectedItemEventArgs.Handled
parameter to true
to prevent execution of the default Action. To access the currently selected object, use the CustomProcessListViewSelectedItemEventArgs.InnerArgs.CurrentObject
parameter.
The example below demonstrates a Controller that handles the CustomProcessSelectedItem
event to show a custom Detail View:
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.SystemModule;
// ...
public class ProcessContactListViewRowController : ViewController {
public ProcessContactListViewRowController() {
TargetViewId = "Contact_ListView";
}
protected override void OnActivated() {
base.OnActivated();
ListViewProcessCurrentObjectController listProcessController = Frame.GetController<ListViewProcessCurrentObjectController>();
if(listProcessController != null)
listProcessController.CustomProcessSelectedItem += ProcessContactListViewRowController_CustomProcessSelectedItem;
}
void ProcessContactListViewRowController_CustomProcessSelectedItem(
object sender, CustomProcessListViewSelectedItemEventArgs e) {
Contact currentContact = (Contact)e.InnerArgs.CurrentObject;
if (currentContact.Position != null && currentContact.Position.Title == "Manager") {
IObjectSpace objectSpace = Application.CreateObjectSpace(currentContact.GetType());
e.InnerArgs.ShowViewParameters.CreatedView = Application.CreateDetailView(objectSpace, "Contact_DetailView_Manager", true, objectSpace.GetObject(currentContact));
e.Handled = true;
}
}
protected override void OnDeactivated() {
base.OnDeactivated();
Frame.GetController<ListViewProcessCurrentObjectController>().CustomProcessSelectedItem -= ProcessContactListViewRowController_CustomProcessSelectedItem;
}
}
Note
- When a List View’s
MasterDetailMode
is set toListAndDetailView
, handle the CreateCustomCurrentObjectDetailView event to specify or customize the Detail View created after the List View’s current object is changed. - The
WebApplication.OptimizationSettings.AllowFastProcessListViewRecordActions
option can affect theCustomProcessSelectedItem
event handling. Disable this option if you encounter any issues when you process selected items in this event handler (for example, issues with default UI element rendering or behavior). For more information, refer to the following topic: Faster rendering and other performance optimizations for popular Web UI scenarios in XAF.
You can find more examples in the following help topic: How to: Replace a List View’s Default Action.
To disable double-click processing in a GridListEditor, set the GridListEditor.ProcessSelectedItemByDoubleClick property to false
.