diff --git a/CS/EFCore/SortListViewEF/SortListViewEF.Blazor.Server/Controllers/BlazorSortListViewController.cs b/CS/EFCore/SortListViewEF/SortListViewEF.Blazor.Server/Controllers/BlazorSortListViewController.cs deleted file mode 100644 index dd4d81b..0000000 --- a/CS/EFCore/SortListViewEF/SortListViewEF.Blazor.Server/Controllers/BlazorSortListViewController.cs +++ /dev/null @@ -1,16 +0,0 @@ -using DevExpress.ExpressApp.Blazor.Editors; -using DevExpress.ExpressApp.Blazor.Editors.Models; -using SortListViewEF.Module; - -namespace SortListViewEF.Blazor.Server.Controllers { - public class BlazorSortListViewController : SortListViewControllerBase { - protected override void OnViewControlsCreated() { - base.OnViewControlsCreated(); - if(View.Editor is DxGridListEditor gridListEditor) { - foreach(DxGridDataColumnModel columnModel in gridListEditor.GridDataColumnModels) { - columnModel.AllowSort = false; - } - } - } - } -} \ No newline at end of file diff --git a/CS/EFCore/SortListViewEF/SortListViewEF.Module/Controllers/SortListViewController.cs b/CS/EFCore/SortListViewEF/SortListViewEF.Module/Controllers/SortListViewController.cs index e4cd9ba..5dbcb89 100644 --- a/CS/EFCore/SortListViewEF/SortListViewEF.Module/Controllers/SortListViewController.cs +++ b/CS/EFCore/SortListViewEF/SortListViewEF.Module/Controllers/SortListViewController.cs @@ -1,29 +1,42 @@ -using System; using DevExpress.Data; using DevExpress.Xpo.DB; using DevExpress.ExpressApp; using DevExpress.ExpressApp.Model; using SortListView.Module.BusinessObjects; +using DevExpress.ExpressApp.Editors; namespace SortListViewEF.Module { - public abstract class SortListViewControllerBase : ObjectViewController { - protected override void OnActivated() { + public class SortListViewController : ObjectViewController { + + string propertyName = nameof(Issue.ModifiedOn); + bool demoFlag = true; + + protected override void OnActivated() + { base.OnActivated(); - string propertyName = nameof(Issue.ModifiedOn); - bool demoFlag = true; - // This code applies a client side sorting. - if(demoFlag) { - IModelColumn columnInfo = View.Model.Columns[propertyName]; - if(columnInfo != null) { - columnInfo.SortIndex = 0; - columnInfo.SortOrder = ColumnSortOrder.Descending; - } - } else { - // This code is used for the server side sorting. - if(View.Model.Sorting[propertyName] == null) { - IModelSortProperty sortProperty = View.Model.Sorting.AddNode(propertyName); - sortProperty.Direction = SortingDirection.Descending; - sortProperty.PropertyName = propertyName; + if (!demoFlag && View.Model.Sorting[propertyName] == null) + { + // This code applies a server side sorting. + IModelSortProperty sortProperty = View.Model.Sorting.AddNode(propertyName); + sortProperty.Direction = SortingDirection.Ascending; + sortProperty.PropertyName = propertyName; + } + } + + protected override void OnViewControlsCreated() + { + base.OnViewControlsCreated(); + if (View.Editor is ColumnsListEditor listEditor) + { + foreach (var columnWrapper in listEditor.Columns) + { + columnWrapper.AllowSortingChange = false; + // This code applies a client side sorting. + if (demoFlag && columnWrapper.PropertyName == propertyName) + { + columnWrapper.SortIndex = 0; + columnWrapper.SortOrder = ColumnSortOrder.Descending; + } } } } diff --git a/CS/EFCore/SortListViewEF/SortListViewEF.Module/Module.cs b/CS/EFCore/SortListViewEF/SortListViewEF.Module/Module.cs index 4e38f1e..a8f0997 100644 --- a/CS/EFCore/SortListViewEF/SortListViewEF.Module/Module.cs +++ b/CS/EFCore/SortListViewEF/SortListViewEF.Module/Module.cs @@ -19,7 +19,6 @@ public SortListViewEFModule() { // SortListViewEFModule // RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.SystemModule.SystemModule)); - RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule)); } public override IEnumerable GetModuleUpdaters(IObjectSpace objectSpace, Version versionFromDB) { ModuleUpdater updater = new DatabaseUpdate.Updater(objectSpace, versionFromDB); diff --git a/CS/EFCore/SortListViewEF/SortListViewEF.Win/Controllers/WinSortListViewController.cs b/CS/EFCore/SortListViewEF/SortListViewEF.Win/Controllers/WinSortListViewController.cs deleted file mode 100644 index 180137b..0000000 --- a/CS/EFCore/SortListViewEF/SortListViewEF.Win/Controllers/WinSortListViewController.cs +++ /dev/null @@ -1,14 +0,0 @@ -using DevExpress.ExpressApp; -using DevExpress.ExpressApp.Win.Editors; -using SortListViewEF.Module; - -namespace SortListViewEF.Win.Controllers { - public class WinSortListViewController : SortListViewControllerBase { - protected override void OnViewControlsCreated() { - base.OnViewControlsCreated(); - if(View.Editor is GridListEditor gridListEditor) { - gridListEditor.GridView.OptionsCustomization.AllowSort = false; - } - } - } -} diff --git a/CS/XPO/SortListView/SortListView.Blazor.Server/Controllers/BlazorSortListViewController.cs b/CS/XPO/SortListView/SortListView.Blazor.Server/Controllers/BlazorSortListViewController.cs deleted file mode 100644 index 485edd5..0000000 --- a/CS/XPO/SortListView/SortListView.Blazor.Server/Controllers/BlazorSortListViewController.cs +++ /dev/null @@ -1,16 +0,0 @@ -using DevExpress.ExpressApp.Blazor.Editors; -using DevExpress.ExpressApp.Blazor.Editors.Models; -using SortListView.Module; - -namespace SortListView.Blazor.Server.Controllers { - public class BlazorSortListViewController : SortListViewControllerBase { - protected override void OnViewControlsCreated() { - base.OnViewControlsCreated(); - if(View.Editor is DxGridListEditor gridListEditor) { - foreach(DxGridDataColumnModel columnModel in gridListEditor.GridDataColumnModels) { - columnModel.AllowSort = false; - } - } - } - } -} \ No newline at end of file diff --git a/CS/XPO/SortListView/SortListView.Module/Controllers/SortListViewController.cs b/CS/XPO/SortListView/SortListView.Module/Controllers/SortListViewController.cs index 6577dff..ce69f04 100644 --- a/CS/XPO/SortListView/SortListView.Module/Controllers/SortListViewController.cs +++ b/CS/XPO/SortListView/SortListView.Module/Controllers/SortListViewController.cs @@ -1,28 +1,42 @@ using DevExpress.Data; using DevExpress.ExpressApp; +using DevExpress.ExpressApp.Editors; using DevExpress.ExpressApp.Model; using DevExpress.Xpo.DB; using SortListView.Module.BusinessObjects; namespace SortListView.Module { - public abstract class SortListViewControllerBase : ObjectViewController { - protected override void OnActivated() { + public class SortListViewController : ObjectViewController { + + string propertyName = nameof(Issue.ModifiedOn); + bool demoFlag = true; + + protected override void OnActivated() + { base.OnActivated(); - string propertyName = nameof(Issue.ModifiedOn); - bool demoFlag = true; - // This code applies a client side sorting. - if(demoFlag) { - IModelColumn columnInfo = View.Model.Columns[propertyName]; - if(columnInfo != null) { - columnInfo.SortIndex = 0; - columnInfo.SortOrder = ColumnSortOrder.Descending; - } - } else { - // This code is used for the server side sorting. - if(View.Model.Sorting[propertyName] == null) { - IModelSortProperty sortProperty = View.Model.Sorting.AddNode(propertyName); - sortProperty.Direction = SortingDirection.Descending; - sortProperty.PropertyName = propertyName; + if (!demoFlag && View.Model.Sorting[propertyName] == null) + { + // This code applies a server side sorting. + IModelSortProperty sortProperty = View.Model.Sorting.AddNode(propertyName); + sortProperty.Direction = SortingDirection.Ascending; + sortProperty.PropertyName = propertyName; + } + } + + protected override void OnViewControlsCreated() + { + base.OnViewControlsCreated(); + if (View.Editor is ColumnsListEditor listEditor) + { + foreach (var columnWrapper in listEditor.Columns) + { + columnWrapper.AllowSortingChange = false; + // This code applies a client side sorting. + if (demoFlag && columnWrapper.PropertyName == propertyName) + { + columnWrapper.SortIndex = 0; + columnWrapper.SortOrder = ColumnSortOrder.Descending; + } } } } diff --git a/CS/XPO/SortListView/SortListView.Module/Module.cs b/CS/XPO/SortListView/SortListView.Module/Module.cs index 9431b24..d9e0a51 100644 --- a/CS/XPO/SortListView/SortListView.Module/Module.cs +++ b/CS/XPO/SortListView/SortListView.Module/Module.cs @@ -22,7 +22,6 @@ public SortListViewModule() { // SortListViewModule // RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.SystemModule.SystemModule)); - RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule)); } public override IEnumerable GetModuleUpdaters(IObjectSpace objectSpace, Version versionFromDB) { ModuleUpdater updater = new DatabaseUpdate.Updater(objectSpace, versionFromDB); diff --git a/CS/XPO/SortListView/SortListView.Win/Controllers/WinSortListViewController.cs b/CS/XPO/SortListView/SortListView.Win/Controllers/WinSortListViewController.cs deleted file mode 100644 index 84d5cd7..0000000 --- a/CS/XPO/SortListView/SortListView.Win/Controllers/WinSortListViewController.cs +++ /dev/null @@ -1,13 +0,0 @@ -using DevExpress.ExpressApp.Win.Editors; -using SortListView.Module; - -namespace SortListView.Win.Controllers { - public class WinSortListViewController : SortListViewControllerBase { - protected override void OnViewControlsCreated() { - base.OnViewControlsCreated(); - if(View.Editor is GridListEditor gridListEditor) { - gridListEditor.GridView.OptionsCustomization.AllowSort = false; - } - } - } -} diff --git a/Readme.md b/Readme.md index 1eab7b5..69451a5 100644 --- a/Readme.md +++ b/Readme.md @@ -1,5 +1,4 @@ -![](https://img.shields.io/endpoint?url=https://codecentral.devexpress.com/api/v1/VersionRange/128593846/25.2.1%2B) [![](https://img.shields.io/badge/Open_in_DevExpress_Support_Center-FF7200?style=flat-square&logo=DevExpress&logoColor=white)](https://supportcenter.devexpress.com/ticket/details/E1276) [![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) [![](https://img.shields.io/badge/💬_Leave_Feedback-feecdd?style=flat-square)](#does-this-example-address-your-development-requirementsobjectives) @@ -13,59 +12,83 @@ This example sorts list view data by a class property and prevents users from mo ## Implementation Details -1. Create a view controller in the application model and configure sorting settings for the list view's column: +1. Create a view controller in the application model and configure sorting settings for the list view's columns and editor controls: _File to review:_ [SortListViewController.cs](CS/EFCore/SortListViewEF/SortListViewEF.Module/Controllers/SortListViewController.cs) ```cs - protected override void OnActivated() { - base.OnActivated(); + public class SortListViewController : ObjectViewController { + string propertyName = nameof(Issue.ModifiedOn); bool demoFlag = true; - // This code applies a client side sorting. - if(demoFlag) { - IModelColumn columnInfo = View.Model.Columns[propertyName]; - if(columnInfo != null) { - columnInfo.SortIndex = 0; - columnInfo.SortOrder = ColumnSortOrder.Descending; - } - } else { - // This code is used for the server side sorting. - if(View.Model.Sorting[propertyName] == null) { + + protected override void OnActivated() + { + base.OnActivated(); + if (!demoFlag && View.Model.Sorting[propertyName] == null) + { + // This code applies a server side sorting. IModelSortProperty sortProperty = View.Model.Sorting.AddNode(propertyName); - sortProperty.Direction = SortingDirection.Descending; + sortProperty.Direction = SortingDirection.Ascending; sortProperty.PropertyName = propertyName; } } + + protected override void OnViewControlsCreated() + { + base.OnViewControlsCreated(); + if (View.Editor is ColumnsListEditor listEditor) + { + foreach (var columnWrapper in listEditor.Columns) + { + columnWrapper.AllowSortingChange = false; + // This code applies a client side sorting. + if (demoFlag && columnWrapper.PropertyName == propertyName) + { + columnWrapper.SortIndex = 0; + columnWrapper.SortOrder = ColumnSortOrder.Descending; + } + } + } + } } ``` -2. Implement platform-dependent controllers that disable the sorting functionality in underlying grid controls: +This approach allows you to sort both nested and root list views, and works if server mode is enabled in the list view. + +## Approach using platform-dependent API: +### Blazor: - _File to review:_ [BlazorSortListViewController.cs](CS/EFCore/SortListViewEF/SortListViewEF.Blazor.Server/Controllers/BlazorSortListViewController.cs) ```cs - protected override void OnViewControlsCreated() { + protected override void OnViewControlsCreated() + { base.OnViewControlsCreated(); - if(View.Editor is DxGridListEditor gridListEditor) { - foreach(DxGridDataColumnModel columnModel in gridListEditor.GridDataColumnModels) { - columnModel.AllowSort = false; + if(View.Editor is DxGridListEditor gridListEditor) + { + foreach (DxGridColumnWrapper column in gridListEditor.Columns) + { + column.AllowSortingChange = false; } } } ``` - _File to review:_ [WinSortListViewController.cs](CS/EFCore/SortListViewEF/SortListViewEF.Win/Controllers/WinSortListViewController.cs) +### Win: ```cs - protected override void OnViewControlsCreated() { + protected override void OnViewControlsCreated() + { base.OnViewControlsCreated(); - if(View.Editor is GridListEditor gridListEditor) { - gridListEditor.GridView.OptionsCustomization.AllowSort = false; + if(View.Editor is GridListEditor gridListEditor && gridListEditor.GridView != null) + { + foreach(WinGridColumnWrapper columnWrapper in gridListEditor.Columns) + { + columnWrapper.Column.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.False; + columnWrapper.Column.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.False; + } } } ``` -This approach allows you to sort both nested and root list views, and works if server mode is enabled in the list view. - ## Documentation - [Application Model (UI Settings Storage)](https://docs.devexpress.com/eXpressAppFramework/112579/ui-construction/application-model-ui-settings-storage) @@ -75,8 +98,6 @@ This approach allows you to sort both nested and root list views, and works if s ## Files to Review - [SortListViewController.cs](CS/EFCore/SortListViewEF/SortListViewEF.Module/Controllers/SortListViewController.cs) -- [BlazorSortListViewController.cs](CS/EFCore/SortListViewEF/SortListViewEF.Blazor.Server/Controllers/BlazorSortListViewController.cs) -- [WinSortListViewController.cs](CS/EFCore/SortListViewEF/SortListViewEF.Win/Controllers/WinSortListViewController.cs)