From 766300434a23e890007c127005aec333466be791 Mon Sep 17 00:00:00 2001 From: PrasanthMadhaiyan Date: Fri, 16 May 2025 18:08:48 +0530 Subject: [PATCH 01/27] 826671: Need to add styles and appearance topic in the Blazor File Manager component. --- blazor-toc.html | 3 + .../blazor-filemanager-custom-dialog.png | Bin 0 -> 26951 bytes .../blazor-filemanager-custom-layout.png | Bin 0 -> 16577 bytes ...azor-filemanager-custom-selected-items.png | Bin 0 -> 20610 bytes .../blazor-filemanager-custom-thumbnail.png | Bin 0 -> 15950 bytes .../blazor-filemanager-custom-toolbar.png | Bin 0 -> 23867 bytes ...filemanager-customized-navigation-pane.png | Bin 0 -> 23908 bytes blazor/file-manager/styles.md | 193 ++++++++++++++++++ 8 files changed, 196 insertions(+) create mode 100644 blazor/file-manager/images/blazor-filemanager-custom-dialog.png create mode 100644 blazor/file-manager/images/blazor-filemanager-custom-layout.png create mode 100644 blazor/file-manager/images/blazor-filemanager-custom-selected-items.png create mode 100644 blazor/file-manager/images/blazor-filemanager-custom-thumbnail.png create mode 100644 blazor/file-manager/images/blazor-filemanager-custom-toolbar.png create mode 100644 blazor/file-manager/images/blazor-filemanager-customized-navigation-pane.png create mode 100644 blazor/file-manager/styles.md diff --git a/blazor-toc.html b/blazor-toc.html index 40621a197c..262a9c7a33 100644 --- a/blazor-toc.html +++ b/blazor-toc.html @@ -2924,6 +2924,9 @@
  • Nested File Manager
  • +
  • + Style and Appearance +
  • API Reference
  • diff --git a/blazor/file-manager/images/blazor-filemanager-custom-dialog.png b/blazor/file-manager/images/blazor-filemanager-custom-dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..3b6bb618464012de5c6585932119054deed97f01 GIT binary patch literal 26951 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 ANdN!< literal 0 HcmV?d00001 diff --git a/blazor/file-manager/images/blazor-filemanager-custom-layout.png b/blazor/file-manager/images/blazor-filemanager-custom-layout.png new file mode 100644 index 0000000000000000000000000000000000000000..b05c23ef772831bb1d4c6da64be16cd693db4db2 GIT binary patch literal 16577 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%0Ay`@-1bP&O51Bcb@$Gdb~@(9Ok_XBtk< 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 I^EdAQFXXQ&Gynhq literal 0 HcmV?d00001 diff --git a/blazor/file-manager/images/blazor-filemanager-custom-selected-items.png b/blazor/file-manager/images/blazor-filemanager-custom-selected-items.png new file mode 100644 index 0000000000000000000000000000000000000000..8203a8679bb9515ef8236816cbc00dbb1c018678 GIT binary patch literal 20610 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 N_H^}gS?83{1OR{afMWmv literal 0 HcmV?d00001 diff --git a/blazor/file-manager/images/blazor-filemanager-custom-thumbnail.png b/blazor/file-manager/images/blazor-filemanager-custom-thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..fa086a1f2a04abdd913c8f2a76cb70d6d63f9d40 GIT binary patch literal 15950 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 Kkz2;D=l%)xgZX;^ literal 0 HcmV?d00001 diff --git a/blazor/file-manager/styles.md b/blazor/file-manager/styles.md new file mode 100644 index 0000000000..f266b29c9e --- /dev/null +++ b/blazor/file-manager/styles.md @@ -0,0 +1,193 @@ +--- +layout: post +title: Styles and Appearance in Blazor File Manager Component | Syncfusion +description: Checkout and learn here all about styles and appearance in Syncfusion Blazor File Manager component and more. +platform: Blazor +control: File Manager +documentation: ug +--- + +# Styles and Appearance in Blazor File Manager Component + +The following content provides the exact CSS structure that can be used to modify the control's appearance based on the user preference. + +## Customizing the File Manager navigation pane + +To customize the File Manager navigation pane, use the `.e-navigation` selector and apply styles. + +```css + +/* Set background color for the File Manager navigation pane */ +.e-filemanager .e-navigation { + background: #3a0647; +} + +/* Highlight the active item in the TreeView inside the navigation pane */ +.e-filemanager .e-treeview .e-list-item.e-active > .e-fullrow { + background: #c3d3f9a1; +} + +/* Set text color for TreeView items in the navigation pane */ +.e-filemanager .e-treeview .e-list-text { + color: #fff; +} + +/* Set icon color for collapsible and expandable TreeView nodes */ +.e-treeview .e-icon-collapsible, +.e-treeview .e-icon-expandable { + color: #fff; +} + +``` + +![Blazor File Manager displays Customized Navigation Pane](images/blazor-filemanager-customized-navigation-pane.png) + +## Customizing the File Manager thumbnail + +To customize the thumbnails in the File Manager, you can apply background-image styles to specific CSS selectors that represent different file types, as listed in the table below. + +|File Type|CSS Selector| +|----|----| +|Image|.e-fe-image| +|Music|.e-fe-music| +|Excel|.e-fe-xlsx| +|Video|.e-fe-video| +|PowerPoint|.e-fe-pptx| +|RAR|.e-fe-rar| +|ZIP|.e-fe-zip| +|Text|.e-fe-txt| +|JavaScript|.e-fe-js| +|CSS|.e-fe-css| +|HTML|.e-fe-html| +|Unknown|.e-fe-unknown| +|Executable|.e-fe-exe| +|MSI|.e-fe-msi| +|PHP|.e-fe-php| +|Word|.e-fe-doc| +|Word(docx)|.e-fe-docx| +|XML|.e-fe-xml| +|Folder|.e-fe-folder| + +The following example demonstrates how to customize the File Manager's thumbnail icon for folders: + +```css + +/* Applies to both Large Icons view and Details view in the File Manager */ + +.e-filemanager .e-large-icons .e-fe-folder, .e-filemanager .e-grid .e-fe-folder { + background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4uc3Qwe2ZpbGw6I0ZGOTI5Mjt9LnN0MXtmaWxsOiNFODdFN0U7fS5zdDJ7ZmlsbDojRkZDM0MzO30uc3Qze2ZpbGw6IzkxRDRGRTt9LnN0NHtmaWxsOiM2M0E3RDM7fS5zdDV7ZmlsbDojQzFFN0ZGO30uc3Q2e2ZpbGw6I0ZGRkZGRjt9LnN0N3tmaWxsOiM4M0Q2Qjk7fS5zdDh7ZmlsbDojNDZDNjhDO30uc3Q5e2ZpbGw6I0JCRThEODt9LnN0MTB7ZmlsbDojRkVCMTdEO30uc3QxMXtmaWxsOiNERDk2NjY7fS5zdDEye2ZpbGw6I0ZFRDRCNzt9LnN0MTN7ZmlsbDojRjJBMkEyO30uc3QxNHtmaWxsOiNGMUM1QzU7fS5zdDE1e2ZpbGw6I0RCQjY2Mzt9LnN0MTZ7ZmlsbDojQ0VBMTUxO30uc3QxN3tmaWxsOiNFQkQ3QTk7fS5zdDE4e2ZpbGw6I0NFQ0VDRTt9LnN0MTl7ZmlsbDojQjdCN0I3O30uc3QyMHtmaWxsOiNFNEU0RTQ7fS5zdDIxe2ZpbGw6IzY1QUFEMTt9LnN0MjJ7ZmlsbDojRTU3QTdBO30uc3QyM3tmaWxsOiNFNkE2RTg7fS5zdDI0e2ZpbGw6I0Q2OEFENjt9LnN0MjV7ZmlsbDojRkZDQ0ZFO30uc3QyNntmaWxsOiM5OENFNUY7fS5zdDI3e2ZpbGw6IzhDQUYyQzt9LnN0Mjh7ZmlsbDojQzZFM0E3O30uc3QyOXtmaWxsOiNGRkI1Nzg7fS5zdDMwe2ZpbGw6I0VEOUY2NDt9LnN0MzF7ZmlsbDojRkZENkI1O30uc3QzMntmaWxsOiNGNEExRUY7fS5zdDMze2ZpbGw6I0REODdERDt9LnN0MzR7ZmlsbDojRjlDQkY2O30uc3QzNXtmaWxsOiNBOEEyRjQ7fS5zdDM2e2ZpbGw6Izg4ODVFODt9LnN0Mzd7ZmlsbDojQ0ZDQ0Y4O30uc3QzOHtmaWxsOiNCQ0JDQkM7fS5zdDM5e2ZpbGw6I0E4QThBODt9LnN0NDB7ZmlsbDojREFEQURBO30uc3Q0MXtmaWxsOiM3N0NDREI7fS5zdDQye2ZpbGw6IzREQkNDMTt9LnN0NDN7ZmlsbDojQjRFM0VCO30uc3Q0NHtmaWxsOiNGRkI3QTQ7fS5zdDQ1e2ZpbGw6I0Y2OUE3Qjt9LnN0NDZ7ZmlsbDojRkZEN0NEO30uc3Q0N3tmaWxsOiM3MUM4RjQ7fS5zdDQ4e2ZpbGw6IzhEQzk3Nzt9LnN0NDl7ZmlsbDojN0NBODUxO30uc3Q1MHtvcGFjaXR5OjAuNDU7ZmlsbDojRkZGRkZGO308L3N0eWxlPjxnPjxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOS41LDI3LjVoLTI3Yy0xLjEsMC0yLTAuOS0yLTJ2LTE5YzAtMS4xLDAuOS0yLDItMmgxMC40bDMuNSwzLjFoMTMuMmMxLjEsMCwyLDAuOSwyLDJ2MTUuOUMzMS41LDI2LjYsMzAuNiwyNy41LDI5LjUsMjcuNXoiLz48cGF0aCBjbGFzcz0ic3Q0IiBkPSJNMjkuNSwyOGgtMjdDMS4xLDI4LDAsMjYuOSwwLDI1LjV2LTE5QzAsNS4xLDEuMSw0LDIuNSw0aDEwLjZsMy41LDMuMWgxM2MxLjQsMCwyLjUsMS4xLDIuNSwyLjV2MTUuOUMzMiwyNi45LDMwLjksMjgsMjkuNSwyOHogTTIuNSw1QzEuNyw1LDEsNS43LDEsNi41djE5QzEsMjYuMywxLjcsMjcsMi41LDI3aDI3YzAuOCwwLDEuNS0wLjcsMS41LTEuNVY5LjZjMC0wLjgtMC43LTEuNS0xLjUtMS41SDE2LjJMMTIuNyw1SDIuNXoiLz48L2c+PC9zdmc+"); +} + +``` + +![Blazor FileManager displays Custom Thumbnail](images/blazor-filemanager-custom-thumbnail.png) + +## Customizing the File Manager layout + +To customize the File Manager layout, use the `.e-layout-content` selector and apply styles. + +```css + +/* Set a border around the main content area of the File Manager */ +.e-filemanager .e-layout-content { + border: 3px solid #000000; +} + +/* Customize the background of the breadcrumb (address bar) */ +.e-filemanager .e-layout-content .e-address { + background: #fbefff; +} + +/* Customize the background for the Large Icons view */ +.e-filemanager .e-layout-content .e-large-icons { + background: #aceebb; +} + +/* Customize the background for the Details view table and content area */ +.e-filemanager .e-layout-content .e-grid .e-table, +.e-filemanager .e-grid .e-gridcontent .e-content { + background: #aceebb; +} + +``` + +![Blazor FileManager displays Custom Layout](images/blazor-filemanager-custom-layout.png) + +## Customizing the File Manager Toolbar + +To customize the File Manager toolbar items, use the `.e-toolbar` selector and apply styles. + +```css + +/* Add border to the entire File Manager toolbar */ +.e-filemanager .e-toolbar { + border: 2px solid #0b0bf9; +} + +/* Style for individual toolbar buttons */ +.e-filemanager .e-toolbar .e-tbar-btn { + background: #0b0bf9; + border: 1px solid #000000; +} + +/* Style for toolbar icons */ +.e-filemanager .e-toolbar .e-tbar-btn .e-icons { + background: #ffffff; + color: #000000; +} + +/* Style for toolbar button text */ +.e-filemanager .e-toolbar .e-toolbar-item .e-tbar-btn .e-tbar-btn-text { + color: #ffffff; +} + +``` + +![Blazor FileManager displays Custom Toolbar](images/blazor-filemanager-custom-toolbar.png) + +## Customizing the File Manager selected files/folders + +To customize the File Manager selected files/folders, use the below selectors and apply styles. + +```css + +/* Highlight for active item in Large Icons view */ +.e-filemanager li.e-list-item.e-large-icon.e-active { + background: #1f47a5a1; + border: 2px solid #000000; + border-radius: 10%; +} + +/* Highlight for active row in Details view */ +.e-filemanager .e-grid td.e-active { + background: #1f47a5a1; +} + +``` + +![Blazor FileManager displays Custom Selected Items](images/blazor-filemanager-custom-selected-items.png) + +## Customizing the File Manager Dialog + +To customize the dialog popup in the File Manager, you can apply styles to specific CSS selectors, as listed in the table below. + +|Element|CSS Selector| +|---------|------------| +|Header|`.e-dlg-header-content`| +|Content|`.e-dlg-content`| +|Overlay|`.e-dlg-overlay`| +|Footer|`.e-footer-content`| + +In this example, we have applied styles to the header content. + +```css + +/* For File Manager Dialog header */ +.e-filemanager .e-dialog .e-dlg-header-content { + background-color: #0606fa4a; + border: 2px solid #000000; +} + +``` + +![Blazor FileManager displays Custom Dialog](images/blazor-filemanager-custom-dialog.png) \ No newline at end of file From b1eb64c81496bd50766b61cb524b38199e9e1872 Mon Sep 17 00:00:00 2001 From: Nithya Date: Tue, 20 May 2025 14:27:24 +0530 Subject: [PATCH 02/27] 957745: Content checking for below md * Batch Editing * In-line Editing * Command column eidting * Column Validation * Dialog Editing --- blazor/datagrid/batch-editing.md | 111 +++++++++++--------- blazor/datagrid/column-validation.md | 58 +++++------ blazor/datagrid/command-column-editing.md | 32 +++--- blazor/datagrid/dialog-editing.md | 63 ++++++----- blazor/datagrid/in-line-editing.md | 121 +++++++++++----------- 5 files changed, 199 insertions(+), 186 deletions(-) diff --git a/blazor/datagrid/batch-editing.md b/blazor/datagrid/batch-editing.md index ae1d0650c8..9a3b0935e6 100644 --- a/blazor/datagrid/batch-editing.md +++ b/blazor/datagrid/batch-editing.md @@ -1,21 +1,21 @@ --- layout: post -title: Batch Editing in Blazor DataGrid Component | Syncfusion -description: Checkout and learn here all about Batch Editing in Syncfusion Blazor DataGrid component and much more details. +title: Batch Editing in Blazor DataGrid | Syncfusion +description: Checkout and learn here all about Batch Editing in Syncfusion Blazor DataGrid and much more details. platform: Blazor control: DataGrid documentation: ug --- -# Batch editing in Blazor DataGrid component +# Batch editing in Blazor DataGrid -Batch editing is a powerful feature in the Grid component that allows you to edit multiple cells simultaneously. It provides a convenient way to make changes to multiple cells and save them in a single request to the data source. This feature is particularly useful when dealing with large datasets or when you need to update multiple cells at once. +Batch editing is a powerful feature in the Syncfusion Blazor DataGrid that allows you to edit multiple cells simultaneously. It provides a convenient way to make changes to several cells and save them in a single request to the data source. This feature is particularly useful when working with large datasets or when you need to update multiple cells at once. -In batch edit mode, when you double-click on a grid cell, the target cell changes to an editable state. You can perform bulk update of the added, changed, and deleted data by either clicking on the toolbar's **Update** button or by externally invoking the [ApplyBatchChangesAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ApplyBatchChangesAsync_Syncfusion_Blazor_Grids_BatchChanges__0__) method. +In batch edit mode, when you double-click a Grid cell, the target cell becomes editable. You can perform bulk updates of added, changed, and deleted data by either clicking the toolbar's **Update** button or by externally invoking the [ApplyBatchChangesAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ApplyBatchChangesAsync_Syncfusion_Blazor_Grids_BatchChanges__0__) method. -To enable batch editing mode, you need to set the [GridEditSettings.Mode](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_Mode) property to **Batch**. This property determines the editing mode of the Grid and allows you to activate the batch editing feature. +To enable batch editing mode, set the [GridEditSettings.Mode](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_Mode) property to **Batch**. This property determines the editing mode of the Grid and allows you to activate the batch editing feature. -Here's an example how to enable batch editing in the blazor grid component: +Here's an example of how to enable batch editing in the Grid: {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -84,13 +84,13 @@ public class OrderDetails ## Automatically update the column based on another column edited value -You can automatically update the value of a column based on the edited value of another column in batch mode. This feature is useful when you want to dynamically calculate and update a column's value in real-time based on the changes made in another related column. +You can automatically update the value of a column based on the edited value of another column in batch mode. This feature is useful when you want to dynamically calculate and update a column's value in real time based on changes made in another related column. -To implement this feature, you can define a calculative column using the [Template](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_Template) property. By leveraging events and methods such as [CellSaved](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_CellSaved) and [UpdateCellAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_UpdateCellAsync_System_Int32_System_String_System_Object_), you can efficiently update the column value whenever another column's value is edited. +To implement this feature, define a calculated column using the [Template](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_Template) property. By leveraging events and methods such as [CellSaved](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_CellSaved) and [UpdateCellAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_UpdateCellAsync_System_Int32_System_String_System_Object_), you can efficiently update the column value whenever another column's value is edited. -Additionally, for batch editing, the add operation can be managed using a boolean variable with the [OnBatchAdd](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnBatchAdd) and [OnBatchSave](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnBatchSave) events. These events ensure that calculations and updates are applied even when new rows are added during batch editing. +Additionally, for batch editing, you can manage the add operation using a boolean variable along with the [OnBatchAdd](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnBatchAdd) and [OnBatchSave](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnBatchSave) events. These events ensure that calculations and updates are applied even when new rows are added during batch editing. -In the following example, the **TotalCost** column value is updated based on changes to the **UnitPrice** and **UnitInStock** columns during batch editing. +In the following example, the **TotalCost** column value is updated based on changes to the **UnitPrice** and **UnitsInStock** columns during batch editing. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -197,15 +197,15 @@ public class ProductDetails ## Cancel edit based on condition -The Grid component provides to cancel the CRUD operations (Edit, Add, Delete) for particular row or cell in batch edit mode based on specific conditions. This feature allows you to control over whether editing should be allowed or prevented for certain rows or cells in the grid. +The Syncfusion Blazor DataGrid allows you to cancel CRUD operations (Edit, Add, and Delete) for specific rows or cells in batch edit mode based on custom conditions. This feature gives you control over whether editing should be permitted or prevented for certain rows or cells in the Grid. -To cancel the edit action, you need to handle the [OnCellEdit](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnCellEdit) event. This event is triggered when a cell enters the edit mode. Within the event handler, you can add a condition to check whether the edit operation should be allowed or canceled. If the condition is met, set the `args.Cancel` property to **true** to cancel the edit operation. +To cancel the edit action, handle the [OnCellEdit](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnCellEdit) event. This event is triggered when a cell enters edit mode. In the event handler, add a condition to determine if the edit operation should be allowed. If the condition is met, set the `args.Cancel` property to **true** to cancel the edit operation. -To cancel the add action, you need to handle the [OnBatchAdd](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnBatchAdd) event. This event is triggered before a new record is added to the batch changes. Within the event handler, you can add a condition to determine whether the add operation should proceed or be canceled. If the condition is met, set the `args.Cancel` property to **true** to cancel the add operation. +To cancel the add action, handle the [OnBatchAdd](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnBatchAdd) event. This event is triggered before a new record is added to the batch changes. In the event handler, add a condition to determine if the add operation should proceed. If the condition is met, set the `args.Cancel` property to **true** to cancel the add operation. -To cancel the delete action, you need to handle the [OnBatchDelete](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnBatchDelete) event. This event is triggered before a record is deleted from the batch changes. Within the event handler, you can add a condition to control whether the delete operation should take place or be canceled. If the condition is met, set the `args.Cancel` property to **true** to cancel the delete operation. +To cancel the delete action, handle the [OnBatchDelete](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnBatchDelete) event. This event is triggered before a record is deleted from the batch changes. In the event handler, add a condition to control whether the delete operation should take place. If the condition is met, set the `args.Cancel` property to **true** to cancel the delete operation. -In the below demo, prevent the CRUD operation based on the **Role** column value. If the Role Column is **Admin**, then edit/delete action is prevented for that row. +In the example below, CRUD operations are prevented based on the **Role** column value. If the Role column is **Admin**, edit and delete actions are prevented for that row. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -302,17 +302,17 @@ public class EmployeeDetails {% previewsample "https://blazorplayground.syncfusion.com/embed/hjBytMVNBCJUWjzh?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -## Adding a new row at the bottom of the grid +## Adding a new row at the bottom of the Grid -The grid component allows you to add a new row at the bottom of the grid, allowing you to insert a new record at the end of the existing data set. This feature is particularly useful when you want to conveniently add new records without the need to scroll up or manually reposition the newly added row. To achieve this, you can make use of the [NewRowPosition](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_NewRowPosition) property in the `GridEditSettings` configuration and set it to **Bottom**. +The Syncfusion Blazor DataGrid allows you to add a new row at the bottom of the Grid, enabling you to insert a new record at the end of the existing data set. This feature is particularly useful when you want to conveniently add new records without scrolling up or manually repositioning the newly added row. To achieve this, use the [NewRowPosition](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_NewRowPosition) property in the `GridEditSettings` configuration and set it to **Bottom**. ->* If you set `NewRowPosition` as **Bottom**, you can use the **TAB** key to easily move between cells or rows in edit mode. As you enter data in each cell and press **TAB**, the grid will automatically create new rows below the current row, allowing you to conveniently add data for multiple rows without having to leave the edit mode. ->* If you set `NewRowPosition` as **Top**, the grid will display a blank row form at the top by default, allowing you to enter data for the new record. However, when the data is saved or updated, it will be inserted at the bottom of the grid ,ensuring the new record appears at the end of the existing data set. ->* If the paging feature is enabled, updating the row will automatically move it to the last page based on the page size.This behavior applies to both local and remote data binding. ->* If scrolling is enabled, you can use the **TAB** key to add a new row, even if the new row is added beyond the currently visible area of the grid. ->* Add `NewRowPosition` is supported for **Normal** and **Batch** editing modes. +>* If you set `NewRowPosition` to **Bottom**, you can use the **TAB** key to easily move between cells or rows in edit mode. As you enter data in each cell and press **TAB**, the Grid will automatically create new rows below the current row, allowing you to conveniently add data for multiple rows without leaving edit mode. +>* If you set `NewRowPosition` to **Top**, the Grid will display a blank row form at the top by default, allowing you to enter data for the new record. However, when the data is saved or updated, it will be inserted at the bottom of the Grid, ensuring the new record appears at the end of the existing data set. +>* If the paging feature is enabled, updating the row will automatically move it to the last page based on the page size. This behavior applies to both local and remote data binding. +>* If scrolling is enabled, you can use the **TAB** key to add a new row, even if the new row is added beyond the currently visible area of the Grid. +>* The `NewRowPosition` property is supported for both **Normal** and **Batch** editing modes. -Here's an example that demonstrates how to enable adding new rows at the bottom of the grid using `NewRowPosition` property: +Here's an example that demonstrates how to enable adding new rows at the bottom of the Grid using the `NewRowPosition` property: {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -406,15 +406,15 @@ public class OrderDetails ## Confirmation dialog -Displaying a confirmation dialog provides an additional layer of confirmation when performing actions like saving a record or canceling changes in the grid. This dialog prompts for confirmation before proceeding with the action, ensuring that accidental or undesired changes are avoided. The grid component offers a built-in confirmation dialog that can be used to confirm save, cancel, and other actions. +Displaying a confirmation dialog provides an extra layer of safety when performing actions such as saving a record or canceling changes in the Syncfusion Blazor DataGrid. This dialog prompts users for confirmation before proceeding, helping to prevent accidental or undesired changes. The Grid includes a built-in confirmation dialog that can be used to confirm save, cancel, and other actions. -To enable the confirmation dialog, you can set the [ShowConfirmDialog](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_ShowConfirmDialog) property of the `GridEditSettings` configuration to **true**. The default value is **true**. +To enable the confirmation dialog, set the [ShowConfirmDialog](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_ShowConfirmDialog) property of the `GridEditSettings` configuration to **true**. The default value is **true**. > * `GridEditSettings.ShowConfirmDialog` requires the [`GridEditSettings.Mode`](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_Mode) to be **Batch**. -> * If `GridEditSettings.ShowConfirmDialog` set to **false**, then confirmation dialog does not display in batch editing. -> * While performing both update and delete operations, a separate delete confirmation dialog is shown at the time of clicking the delete button or pressing the delete key itself. +> * If `GridEditSettings.ShowConfirmDialog` is set to **false**, the confirmation dialog will not appear in batch editing. +> * When performing update or delete operations, a separate delete confirmation dialog is shown when clicking the delete button or pressing the delete key. -Here's an example that demonstrates how to enable/disable the confirmation dialog using the `ShowConfirmDialog` property: +The following example demonstrates how to enable or disable the confirmation dialog using the `ShowConfirmDialog` property: {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -504,13 +504,13 @@ public class OrderDetails ## How to make editing in single click and arrow keys -You can enable editing in a single click and navigate between cells or rows using arrow keys without having to double-click or use the mouse for navigation. By default, in batch mode, the **TAB** key can be used to edit or move to the next cell or row and the **Enter** key is used to move to the next row cell. However, you can customize this behavior to enable editing with a single click or using arrow keys. +You can enable editing with a single click and navigate between cells or rows using arrow keys, without needing to double-click or use the mouse for navigation. By default, in batch mode, the **TAB** key allows you to move to the next cell or row, and the **Enter** key moves to the next cell in the row. However, you can customize this behavior to start editing with a single click or by using arrow keys. -To enable editing in a single click, you can handle the [CellSelected](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_CellSelected) event of the Grid. Within the event handler, call the [EditCellAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_EditCellAsync_System_Int32_System_String_) method to make the clicked cell editable. +To enable editing with a single click, handle the [CellSelected](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_CellSelected) event of the Grid. In the event handler, call the [EditCellAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_EditCellAsync_System_Int32_System_String_) method to make the selected cell editable. > Ensure that the [Mode](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridSelectionSettings.html#Syncfusion_Blazor_Grids_GridSelectionSettings_Mode) property of [GridSelectionSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridSelectionSettings.html) is set to **Both**. -Here's an example that demonstrates how to achieve both single-click editing and arrow key navigation using the `CellSelected` event in conjunction with the `EditCellAsync` method: +The following example demonstrates how to enable single-click editing and arrow key navigation using the `CellSelected` event together with the `EditCellAsync` method: {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -596,9 +596,9 @@ public class OrderDetails ## Disable editing for a particular cell -You can prevent editing of specific cells based on certain conditions in the Grid component. This feature is useful when you want to restrict editing for certain cells, such as read-only data, calculated values, or protected information. It helps maintain data integrity and ensures that only authorized changes can be made in the grid. +You can prevent editing of specific cells based on certain conditions in the Syncfusion Blazor DataGrid. This feature is useful when you want to restrict editing for certain cells, such as read-only data, calculated values, or protected information. It helps maintain data integrity and ensures that only authorized changes can be made in the Grid. -To disable editing for a particular cell in batch mode, use the [OnCellEdit](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnCellEdit) event of the grid. You can then use the **args.Cancel** property and set it to **true** to prevent editing for that cell. +To disable editing for a particular cell in batch mode, use the [OnCellEdit](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnCellEdit) event of the Grid. In the event handler, set the **args.Cancel** property to **true** to prevent editing for that cell. Here's an example demonstrating how you can disable editing for cells containing the value **France** using the `OnCellEdit` event: @@ -676,13 +676,13 @@ public class OrderDetails ## Save or update the changes immediately -The Grid component provides a convenient way to save or update changes immediately in batch mode without the need for a separate Save button. This feature is particularly useful when you want to allow you to edit data efficiently without having to manually trigger a save action. You can achieve this by utilizing the [CellSaved](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_CellSaved) event and the [EndEditAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_EndEditAsync) method. +The Syncfusion Blazor DataGrid provides a convenient way to save or update changes immediately in batch mode without the need for a separate Save button. This feature is particularly useful when you want to allow you to edit data efficiently without having to manually trigger a save action. You can achieve this by utilizing the [CellSaved](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_CellSaved) event and the [EndEditAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_EndEditAsync) method. -By default, when you use the `EndEditAsync` method to save or update data, a confirmation dialog is displayed. This dialog prompts for confirmation before proceeding with the save or cancel action, ensuring that accidental or undesired changes are avoided. +By default, when you use the `EndEditAsync` method to save or update data, a confirmation dialog is displayed. This dialog prompts for confirmation before proceeding with the save or cancel action, helping to prevent accidental or undesired changes. The `CellSaved` event is triggered when a cell is saved in the Grid. It provides a way to perform custom logic when a cell is saved or updated. -> * To avoid the confirmation dialog when using the `EndEditAsync` method, you can set [GridEditSettings.ShowConfirmDialog](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_ShowConfirmDialog) to **false**. However, please note that to use this property, the [GridEditSettings.Mode](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_Mode) must be set to **Batch**. This combination of properties allows you to save or update changes immediately without the need for a confirmation dialog. +> * To avoid the confirmation dialog when using the `EndEditAsync` method, you can set [GridEditSettings.ShowConfirmDialog](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_ShowConfirmDialog) to **false**. However, note that to use this property, the [GridEditSettings.Mode](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_Mode) must be set to **Batch**. This combination allows you to save or update changes immediately without the need for a confirmation dialog. Here's an example that demonstrates how to achieve immediate saving or updating of changes using the `CellSaved` event and the `EndEditAsync` method: @@ -758,15 +758,16 @@ public class OrderDetails ## Edit next row or previous row from the current row -In batch mode, you can seamlessly edit the next or previous row directly from the current row by enabling the [GridEditSettings.AllowNextRowEdit](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_AllowNextRowEdit) property and setting it to **true**. This feature enhances individual experience by streamlining row-to-row editing in an efficient and intuitive manner. +In batch mode, you can seamlessly edit the next or previous row directly from the current row by enabling the [GridEditSettings.AllowNextRowEdit](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_AllowNextRowEdit) property and setting it to **true**. This feature enhances the user experience by streamlining row-to-row editing in an efficient and intuitive manner. * **Navigate to the Next Row**: Press the `TAB` key from the last cell of the current row to move to and begin editing the first cell of the next row. * **Navigate to the Previous Row**: Press `SHIFT + TAB` from the first cell of the current row to move to and begin editing the last cell of the previous row. -Here's an example that demonstrates how to enable/disable the `GridEditSettings.AllowNextRowEdit` property: +The following example demonstrates how to enable or disable the `GridEditSettings.AllowNextRowEdit` property: {% tabs %} {% highlight razor tabtitle="Index.razor" %} + @using Syncfusion.Blazor.Grids @using Syncfusion.Blazor.Buttons @@ -799,7 +800,9 @@ Here's an example that demonstrates how to enable/disable the `GridEditSettings. } } {% endhighlight %} + {% highlight c# tabtitle="OrderDetails.cs" %} + public class OrderDetails { public static List Order = new List(); @@ -839,6 +842,7 @@ public class OrderDetails public string ShipCountry { get; set; } public DateTime OrderDate { get; set; } } + {% endhighlight %} {% endtabs %} @@ -846,23 +850,24 @@ public class OrderDetails ## Provide new item or edited item using events -Grid uses `Activator.CreateInstance()` to create or clone new record instance during add and edit operations, so it must have parameterless constructors defined for the model class and any referenced complex type classes. +The Syncfusion Blazor DataGrid uses `Activator.CreateInstance()` to create or clone new record instances during add and edit operations. Therefore, the model class and any referenced complex type classes must have parameterless constructors defined. -There are cases where custom logic is required for creating new object or new object instance cannot be created using `Activator.CreateInstance()`. In such cases, you can provide model object instance manually using events. +However, there are scenarios where custom logic is required to create a new object, or a new object instance cannot be created using `Activator.CreateInstance()`. In such cases, you can manually provide the model object instance using events. -You can use the [OnBatchAdd](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnBatchAdd) and [OnCellEdit](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnCellEdit) events to provide new object instance during add and cell edit operations respectively. +You can use the [OnBatchAdd](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnBatchAdd) and [OnCellEdit](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnCellEdit) events to provide a new object instance during add and cell edit operations, respectively. -For add operation, assign new object to the [OnBatchAdd.DefaultData](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.BeforeBatchAddArgs-1.html#Syncfusion_Blazor_Grids_BeforeBatchAddArgs_1_DefaultData) property. For cell edit, assign cloned object in the [OnCellEdit.Data](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.CellEditArgs-1.html#Syncfusion_Blazor_Grids_CellEditArgs_1_Data) property. +For the add operation, assign the new object to the [OnBatchAdd.DefaultData](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.BeforeBatchAddArgs-1.html#Syncfusion_Blazor_Grids_BeforeBatchAddArgs_1_DefaultData) property. For cell editing, assign the cloned object to the [OnCellEdit.Data](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.CellEditArgs-1.html#Syncfusion_Blazor_Grids_CellEditArgs_1_Data) property. In the following example: -* A model class with no parameter-less constructor is bound with grid. -* Enabled batch editing feature in grid. -* `OnBatchAdd` event callback is assigned in which `DefaultData` property is assigned with custom object for add operation. -* `OnCellEdit` event callback is assigned in which the `Data` property is assigned with a custom object for handling edit operation. +* A model class without a parameterless constructor is bound to the Grid. +* Batch editing is enabled in the Grid. +* The `OnBatchAdd` event callback assigns a custom object to the `DefaultData` property for the add operation. +* The `OnCellEdit` event callback assigns a custom object to the `Data` property for the edit operation. {% tabs %} {% highlight razor tabtitle="Index.razor" %} + @using Syncfusion.Blazor.Grids @@ -894,8 +899,11 @@ In the following example: args.Data = args.Data ?? new OrderDetails(args.RowData.OrderID, args.RowData.CustomerID, args.RowData.Freight, args.RowData.ShipCountry, args.RowData.OrderDate); } } + {% endhighlight %} + {% highlight c# tabtitle="OrderDetails.cs" %} + public class OrderDetails { public static List Order = new List(); @@ -935,6 +943,7 @@ public class OrderDetails public string ShipCountry { get; set; } public DateTime OrderDate { get; set; } } + {% endhighlight %} {% endtabs %} @@ -942,12 +951,13 @@ public class OrderDetails ## How to perform bulk changes using a method -To perform bulk changes, including adding, editing, and deleting records, you can utilize the [ApplyBatchChangesAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ApplyBatchChangesAsync_Syncfusion_Blazor_Grids_BatchChanges__0__) method. This method streamlines the process of updating new, edited, and deleted records within the current page of the Grid. It is primarily designed to efficiently apply bulk changes all at once. +To perform bulk changes—including adding, editing, and deleting records—you can use the [ApplyBatchChangesAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_ApplyBatchChangesAsync_Syncfusion_Blazor_Grids_BatchChanges__0__) method. This method streamlines the process of updating new, edited, and deleted records within the current page of the Grid, allowing you to efficiently apply all changes at once. -When you make edits or add new records, these changes will be visually highlighted with green highlighting within the current view page. This visual cue provides you with the choice to either save or cancel the changes, allowing for a seamless and efficient management of bulk modifications. +When you make edits or add new records, these changes are visually highlighted in green within the current view. This visual cue allows you to easily identify modified records and choose whether to save or cancel the changes, enabling seamless and efficient management of bulk modifications. {% tabs %} {% highlight razor tabtitle="Index.razor" %} + @using Syncfusion.Blazor.Grids
    Apply Batch Changes
    @@ -981,7 +991,9 @@ When you make edits or add new records, these changes will be visually highlight } } {% endhighlight %} + {% highlight c# tabtitle="OrderDetails.cs" %} + public class OrderDetails { public static List Order = new List(); @@ -1021,6 +1033,7 @@ public class OrderDetails public string ShipCountry { get; set; } public DateTime OrderDate { get; set; } } + {% endhighlight %} {% endtabs %} diff --git a/blazor/datagrid/column-validation.md b/blazor/datagrid/column-validation.md index 80c6088cc4..9df71ddc60 100644 --- a/blazor/datagrid/column-validation.md +++ b/blazor/datagrid/column-validation.md @@ -1,23 +1,23 @@ --- layout: post -title: Column Validation in Blazor DataGrid Component | Syncfusion -description: Checkout and learn here all about Column Validation in Syncfusion Blazor DataGrid component and much more details. +title: Column Validation in Blazor DataGrid | Syncfusion +description: Checkout and learn here all about Column Validation in Syncfusion Blazor DataGrid and much more details. platform: Blazor control: DataGrid documentation: ug --- -# Validation in Blazor DataGrid component +# Validation in Blazor DataGrid -Validation is a crucial aspect of data integrity in any application. The Blazor Grid component in Syncfusion provides built-in support for easy and effective data validation. This feature ensures that the data entered or modified adheres to predefined rules, preventing errors and guaranteeing the accuracy of the displayed information. +Validation is a crucial aspect of data integrity in any application. The Syncfusion Blazor DataGrid provides built-in support for easy and effective data validation. This feature ensures that the data entered or modified adheres to predefined rules, preventing errors and guaranteeing the accuracy of the displayed information. ## Column validation -Column validation allows you to validate the edited or added row data before saving it. This feature is particularly useful when you need to enforce specific rules or constraints on individual columns to ensure data integrity. By applying validation rules to columns, you can display error messages for invalid fields and prevent the saving of erroneous data. This feature leverages the **Form Validator** library to perform the validation. You can define validation rules using the [GridColumn.ValidationRules](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_ValidationRules) property to specify the criteria for validating column values. +Column validation allows you to validate edited or newly added row data before saving it. This feature is particularly useful when you need to enforce specific rules or constraints on individual columns to ensure data integrity. By applying validation rules to columns, you can display error messages for invalid fields and prevent the saving of erroneous data. This feature leverages the **Form Validator** library to perform validation. You can define validation rules using the [GridColumn.ValidationRules](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_ValidationRules) property to specify the criteria for validating column values. -> Validation in datagrid works based on the Microsoft Blazor EditForm behavior. So once the validation message is shown then it will be again validated only during the form submit or when you focus out from that particular field. Refer the [Microsoft Validation](https://learn.microsoft.com/en-us/aspnet/core/blazor/forms/validation?view=aspnetcore-5.0#data-annotations-validator-component-and-custom-validation) for further reference. +> Validation in DataGrid works based on the Microsoft Blazor EditForm behavior. Once a validation message is shown, it will be validated again only during form submission or when you focus out from that particular field. Refer to the [Microsoft Validation](https://learn.microsoft.com/en-us/aspnet/core/blazor/forms/validation?view=aspnetcore-5.0#data-annotations-validator-component-and-custom-validation) documentation for further reference. -The following code example demonstrates how to define a validation rule for grid column: +The following code example demonstrates how to define a validation rule for a Grid column: {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -88,21 +88,21 @@ public class OrderDetails ## Data annotation -Data Annotation validation attributes are used to validate the fields in the DataGrid. The validation attributes that are supported in the DataGrid are listed below. +Data annotation validation attributes are used to validate fields in the DataGrid. The following validation attributes are supported in the DataGrid: | Attribute Name | Functionality | -|-------|---------| -| Validations are,

    1. RequiredAttribute
    2. StringLengthAttribute
    3. RangeAttribute
    4. RegularExpressionAttribute
    5. MinLengthAttribute
    6. MaxLengthAttribute
    7. EmailAddressAttribute
    8. CompareAttribute
    9. DataTypeAttribute
    10. DataType.Custom
    11. DataType.Date
    12. DataType.DateTime
    13. DataType.EmailAddress
    14. DataType.ImageUrl
    15. DataType.Url | The data annotation validation attributes are used as `validation rules` in the DataGrid CRUD operations | +|---------------|--------------| +| 1. RequiredAttribute
    2. StringLengthAttribute
    3. RangeAttribute
    4. RegularExpressionAttribute
    5. MinLengthAttribute
    6. MaxLengthAttribute
    7. EmailAddressAttribute
    8. CompareAttribute
    9. DataTypeAttribute
    10. DataType.Custom
    11. DataType.Date
    12. DataType.DateTime
    13. DataType.EmailAddress
    14. DataType.ImageUrl
    15. DataType.Url | These data annotation validation attributes are used as `validation rules` in DataGrid CRUD operations. | -More information on the data annotation can be found in this [documentation](https://blazor.syncfusion.com/documentation/datagrid/data-annotation) section. +For more information on data annotation, refer to this [documentation](https://blazor.syncfusion.com/documentation/datagrid/data-annotation) section. ## Custom validation -Custom Validation allows the users to customize the validations manually according to the individuals criteria. +Custom validation allows users to define their own validation logic based on specific requirements. -Custom Validation can be used by overriding the IsValid method inside the class inherits the Validation Attribute. All the validations are done inside the IsValid method. +To implement custom validation, create a class that inherits from the `ValidationAttribute` class and override the `IsValid` method. All custom validation logic should be placed inside the `IsValid` method. -The following sample code demonstrates custom validations implemented in the fields **EmployeeID** and **Freight**. +The following sample code demonstrates how to implement custom validation for the **EmployeeID** and **Freight** fields. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -223,9 +223,9 @@ public class CustomValidationFreight : ValidationAttribute ### Validate complex column using data annotation attribute -You can perform validation for complex data binding columns using the [ValidateComplexType](https://learn.microsoft.com/en-us/aspnet/core/blazor/forms/validation?view=aspnetcore-5.0#data-annotations-validator-component-and-custom-validation) attribute of data annotation. +You can validate complex data binding columns by using the [ValidateComplexType](https://learn.microsoft.com/en-us/aspnet/core/blazor/forms/validation?view=aspnetcore-5.0#data-annotations-validator-component-and-custom-validation) attribute from data annotations. -In the following sample, you must use the `ValidateComplexType` attribute for the EmployeeName class and display custom message in the "First Name" column using the `RequiredAttribute` of data annotation. +In the following sample, the `ValidateComplexType` attribute is applied to the `EmployeeName` class to enable validation of its properties. A custom validation message is displayed in the "First Name" column by using the `RequiredAttribute` with a custom error message. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -303,16 +303,16 @@ public class EmployeeInfo ## Custom validator component -Apart from using default validation and custom validation, there are cases where you might want to use your validator component to validate the grid edit form. Such cases can be achieved using the **Validator** property of the **GridEditSettings** component which accepts a validation component and inject it inside the **EditForm** of the grid. Inside the **Validator**, you can access the data using the implicit named parameter context which is of type [ValidatorTemplateContext](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.ValidatorTemplateContext.html). +In addition to using the default and custom validation options, there may be scenarios where you want to implement your own validator component to validate the Grid edit form. This can be accomplished by using the **Validator** property of the **GridEditSettings** component, which accepts a validation component and injects it inside the **EditForm** of the Grid. Within the **Validator**, you can access the data using the implicit parameter `context`, which is of type [ValidatorTemplateContext](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.ValidatorTemplateContext.html). -For creating a form validator component you can refer [here](https://learn.microsoft.com/en-us/aspnet/core/blazor/forms-and-input-components?view=aspnetcore-5.0#validator-components). +For guidance on creating a form validator component, refer to the [official documentation](https://learn.microsoft.com/en-us/aspnet/core/blazor/forms-and-input-components?view=aspnetcore-5.0#validator-components). -In the below code example, the following things have been done. +In the following code example: -* Created a form validator component named `MyCustomValidator` which accepts [ValidatorTemplateContext](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.ValidatorTemplateContext.html) value as parameter. -* Used the `MyCustomValidator` component inside the **Validator** property. -* This validator component will check whether Freight value is in between 0 to 100. -* Displayed the validation error messages using **ValidationMessage** component. +* A form validator component named `MyCustomValidator` is created, which accepts a [ValidatorTemplateContext](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.ValidatorTemplateContext.html) value as a parameter. +* The `MyCustomValidator` component is used inside the **Validator** property. +* This validator component checks whether the Freight value is between 0 and 100. +* Validation error messages are displayed using the **ValidationMessage** component. ```csharp [MyCustomValidator.cs] @@ -400,9 +400,9 @@ public class MyCustomValidator : ComponentBase ## Display validation message using in-built tooltip -In the above code example, you can see that **ValidationMessage** component is used, this might be not suitable when using Inline editing or batch editing. In such cases, you can use the in-built validation tooltip to show those error messages by using `ValidatorTemplateContext.ShowValidationMessage(fieldName, IsValid, Message)` method. +In the above code example, the **ValidationMessage** component is used. However, this approach may not be suitable when using Inline editing or Batch editing modes. In such cases, you can use the built-in validation tooltip to display error messages by calling the `ValidatorTemplateContext.ShowValidationMessage(fieldName, isValid, message)` method. -Now the HandleValidation method of the MyCustomValidator component would be changed like below. +The `HandleValidation` method of the `MyCustomValidator` component can be updated as shown below. ```c# protected void HandleValidation(FieldIdentifier identifier) @@ -433,7 +433,7 @@ protected void HandleValidation(FieldIdentifier identifier) ## Disable in-built validator component -**Validator** property can also be used to disable the in-built validator component used by the grid. For instance, by default, the grid uses two validator components, **DataAnnotationValidator** and an internal [ValidationRules](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_ValidationRules) property handling validator, for handling edit form validation. If you are willing to use only the **DataAnnotationValidator** component, then it could be simply achieved by using the below code. +The **Validator** property can also be used to disable the built-in validator component used by the Syncfusion Blazor DataGrid. By default, the Grid uses two validator components: **DataAnnotationsValidator** and an internal validator that handles the [ValidationRules](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_ValidationRules) property for edit form validation. If you want to use only the **DataAnnotationsValidator** component, you can achieve this by using the following code. ```c# @@ -463,11 +463,11 @@ protected void HandleValidation(FieldIdentifier identifier) ## Display validation message in dialog template -Use the form validation to display a validation message for a column that is not defined in the grid. +Use form validation to display a validation message for a field that is not defined as a column in the Syncfusion Blazor DataGrid. -Use the **Validator** property to display a validation message for one of the fields in the dialog template that is not defined in the Grid column. The validation message for the **ShipAddress** is displayed in the dialog template in the following example. In the grid column, the **ShipAddress** field is not defined. +You can use the **Validator** property to show a validation message for a field in the dialog template, even if that field is not present in the Grid columns. In the following example, the validation message for **ShipAddress** is displayed in the dialog template, even though the **ShipAddress** field is not defined as a Grid column. -> The validation message for fields that are not defined in the grid column will be shown as the validation summary (top of the dialog edit form) in the dialog edit form. +> Validation messages for fields not defined in the Grid columns will appear as a validation summary at the top of the dialog edit form. {% tabs %} {% highlight razor tabtitle="Index.razor" %} diff --git a/blazor/datagrid/command-column-editing.md b/blazor/datagrid/command-column-editing.md index 27cd0171c0..57a5be5c8c 100644 --- a/blazor/datagrid/command-column-editing.md +++ b/blazor/datagrid/command-column-editing.md @@ -1,28 +1,28 @@ --- layout: post -title: Command Column Editing in Blazor DataGrid Component | Syncfusion -description: Checkout and learn here all about Command Column Editing in Syncfusion Blazor DataGrid component and much more details. +title: Command Column Editing in Blazor DataGrid | Syncfusion +description: Checkout and learn here all about Command Column Editing in Syncfusion Blazor DataGrid and much more details. platform: Blazor control: DataGrid documentation: ug --- -# Command column editing in Blazor DataGrid component +# Command column editing in Blazor DataGrid -The command column editing feature allows you to add CRUD (Create, Read, Update, Delete) action buttons in a column for performing operations on individual rows.This feature is commonly used when you need to enable inline editing, deletion, or saving of row changes directly within the grid. +The command column editing feature allows you to add CRUD (Create, Read, Update, Delete) action buttons in a column for performing operations on individual rows. This feature is commonly used when you want to enable inline editing, deletion, or saving of row changes directly within the Grid. -To enable command column editing, you can utilize the [GridColumn.Commands](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_Commands) property. By defining this property, you can specify the command buttons to be displayed in the command column, such as Edit, Delete, Save, and Cancel. +To enable command column editing, use the [GridColumn.Commands](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_Commands) property. By defining this property, you can specify the command buttons to display in the command column, such as Edit, Delete, Save, and Cancel. -The available built-in command buttons are: +The available built-in command buttons are: -| Command Button | Actions | -|----------------|---------| -| Edit | Edit the current row.| -| Delete | Delete the current row.| -| Save | Update the edited row.| -| Cancel | Cancel the edited state. | +| Command Button | Action | +|---------------|-----------------------------| +| Edit | Edit the current row. | +| Delete | Delete the current row. | +| Save | Update the edited row. | +| Cancel | Cancel the edit operation. | -Here's an example that demonstrates how to add CRUD action buttons in a column using the `GridCommandColumns` property: +Here's an example that demonstrates how to add CRUD action buttons in a column using the `GridCommandColumns` property: {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -99,11 +99,11 @@ public class OrderDetails ## Custom command column -The custom command column feature in the Grid component allows you to add custom command buttons in a column to perform specific actions on individual rows. This feature is particularly useful when you need to provide customized functionality for editing, deleting, or performing any other operation on a row. +The custom command column feature in the Syncfusion Blazor DataGrid allows you to add custom command buttons in a column to perform specific actions on individual rows. This feature is particularly useful when you need to provide customized functionality for editing, deleting, or performing any other operation on a row. To add custom command buttons in a column, you can utilize the [GridColumn.Commands](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_Commands) property. Furthermore, you can define the actions associated with these custom buttons using the [CommandClicked](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_CommandClicked) event. -Here's an example that demonstrates how to add custom command buttons using the `GridCommandColumns` property and customize the button click behavior to display grid details in a dialog using the `CommandClicked` event: +Here's an example that demonstrates how to add custom command buttons using the `GridCommandColumns` property and customize the button click behavior to display Grid details in a dialog using the `CommandClicked` event: {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -204,4 +204,4 @@ public class OrderDetails {% previewsample "https://blazorplayground.syncfusion.com/embed/htVoDiBhCEmvtthU?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -> The Grid component does not support adding a new record using the command column. Because, the command column, along with the command buttons, will be rendered only after the record is created. As a result, Grid only supported edit, delete, cancel, and update options in the command column. \ No newline at end of file +> The Syncfusion Blazor DataGrid does not support adding a new record using the command column. This is because the command column and its buttons are rendered only after a record is created. As a result, the Grid supports only edit, delete, cancel, and update options in the command column. \ No newline at end of file diff --git a/blazor/datagrid/dialog-editing.md b/blazor/datagrid/dialog-editing.md index 05c6cc088e..ecb77da061 100644 --- a/blazor/datagrid/dialog-editing.md +++ b/blazor/datagrid/dialog-editing.md @@ -1,19 +1,19 @@ --- layout: post -title: Dialog Editing in Blazor DataGrid Component | Syncfusion -description: Checkout and learn here all about Dialog Editing in Syncfusion Blazor DataGrid component and much more details. +title: Dialog Editing in Blazor DataGrid | Syncfusion +description: Checkout and learn here all about Dialog Editing in Syncfusion Blazor DataGrid and much more details. platform: Blazor control: DataGrid documentation: ug --- -# Dialog editing in Blazor DataGrid component +# Dialog editing in Blazor DataGrid -Dialog editing is a feature in the Grid component that allows you to edit the data of the currently selected row using a dialog window. With dialog editing, you can easily modify cell values and save the changes back to the data source.This feature is particularly beneficial in scenarios where you need to quickly modify data without navigating to a separate page or view, and it streamlines the process of editing multiple cells. +Dialog editing is a feature in the Syncfusion Blazor DataGrid that allows you to edit the data of the currently selected row using a dialog window. With dialog editing, you can easily modify cell values and save the changes back to the data source. This feature is particularly beneficial in scenarios where you need to quickly modify data without navigating to a separate page or view, and it streamlines the process of editing multiple cells. -To enable dialog editing in grid component, you need to set the [GridEditSettings.Mode](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_Mode) property to **Dialog**. This property determines the editing mode for the grid, and when set to **Dialog**, it enables the dialog editing feature. +To enable dialog editing in the Grid, you need to set the [GridEditSettings.Mode](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_Mode) property to **Dialog**. This property determines the editing mode for the Grid, and when set to **Dialog**, it enables the dialog editing feature. -Here's an example how to enable dialog editing in the blazor grid component: +Here's an example of how to enable dialog editing in the Grid: {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -81,11 +81,11 @@ public class OrderDetails ## Customize the edit dialog -The edit dialog in the Grid component allows you to customize its appearance and behavior based on the type of action being performed, such as editing or adding a record. You can modify properties like header text, showCloseIcon, and height to tailor the edit dialog to your specific requirements. +The edit dialog in the Syncfusion Blazor DataGrid allows you to customize its appearance and behavior based on the type of action being performed, such as editing or adding a record. You can modify properties like header text, showCloseIcon, and height to tailor the edit dialog to your specific requirements. -To customize the edit dialog, you can use [HeaderTemplate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_HeaderTemplate) and [FooterTemplate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_FooterTemplate) of the [GridEditSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html) property to customize the appearance of edit dialog. +To customize the edit dialog, use the [HeaderTemplate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_HeaderTemplate) and [FooterTemplate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_FooterTemplate) properties of [GridEditSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html) to modify the appearance of the edit dialog. -The following example that demonstrates how to customize the edit dialog. +The following example demonstrates how to customize the edit dialog. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -128,11 +128,11 @@ The following example that demonstrates how to customize the edit dialog. } public async Task CancelEdit() { - await Grid.CloseEditAsync(); //Cancel editing action + await Grid.CloseEditAsync(); //Cancel editing action. } public async Task SaveEdit() { - await Grid.EndEditAsync(); //Save the edited/added data to Grid + await Grid.EndEditAsync(); //Save the edited/added data to Grid. } } {% endhighlight %} @@ -179,26 +179,23 @@ public class OrderDetails {% previewsample "https://blazorplayground.syncfusion.com/embed/VDVyZWjvKbTMIaIU?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -> * The Grid add or edit dialog element has the max-height property, which is calculated based on the available window height. So, in the normal window (1920 x 1080), it is possible to set the dialog's height up to 658px. -> * You can refer to our [Blazor DataGrid](https://www.syncfusion.com/blazor-components/blazor-datagrid) feature tour page for its groundbreaking feature representations. You can also explore our [Blazor DataGrid example](https://blazor.syncfusion.com/demos/datagrid/overview?theme=bootstrap4) to understand how to present and manipulate data. +> * The Grid add or edit dialog element has a max-height property, which is calculated based on the available window height. In a standard window (1920 x 1080), you can set the dialog's height up to 658px. +> * Refer to our [Grid](https://www.syncfusion.com/blazor-components/blazor-datagrid) feature tour page for an overview of its features. You can also explore our [Grid example](https://blazor.syncfusion.com/demos/datagrid/overview?theme=bootstrap4) to see how to present and manipulate data. ## Show or hide columns in dialog editing -The show or hide columns in dialog editing feature in the grid allows you to dynamically control the visibility of columns while editing in the dialog edit mode. This feature is useful when you want to display specific columns based on the type of action being performed, such as editing an existing record or adding a new record. To achieve this, you can utilize the following events of the Grid. +The show or hide columns in dialog editing feature in the Syncfusion Blazor DataGrid allows you to dynamically control the visibility of columns while editing in dialog edit mode. This feature is useful when you want to display specific columns based on the type of action being performed, such as editing an existing record or adding a new record. To achieve this, you can utilize the following Grid events: -1. [RowCreating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowCreating): Triggered before an add action is executed in the grid. +1. [RowCreating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowCreating): Triggered before an add action is executed in the Grid. +2. [RowEditing](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowEditing): Triggered before an edit action is executed in the Grid. +3. [RowUpdating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowUpdating): Triggered before an update action is executed in the Grid. +4. [EditCanceling](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_EditCanceling): Triggered before a cancel action is executed in the Grid. -2. [RowEditing](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowEditing): Triggered before an edit action is executed in the grid. +The `RowCreating` and `RowEditing` events are triggered whenever an action such as adding or editing a record is initiated in the Grid. Within the event handlers, you can modify the visibility of columns using the [Column.Visible](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_Visible) property. This property determines whether a column should be displayed or hidden. -3. [RowUpdating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowDeleting): Triggered before a update action is executed in the grid. +Additionally, you can reset the column visibility to its initial state using the `Column.Visible` property in the `RowUpdating` and `EditCanceling` events of the Grid. -4. [EditCanceling](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_EditCanceling): Triggered before a cancel action is executed in the grid. - -The `RowCreating` and `RowEditing` events are triggered whenever an action such as adding or editing a record is initiated in the grid. Within the events handler, you can modify the visibility of columns using the [Column.Visible](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_Visible) property. This property determines whether a column should be displayed or hidden. - -Additionally, you can reset the column visibility to its initial state using the `Column.Visible` property using `RowUpdating` and `EditCanceling` events of grid. - -In the following example, the **CustomerID** column is rendered as a hidden column, and the **ShipCountry** column is rendered as a visible column. In the edit mode, the **CustomerID** column will be changed to a visible state and the **ShipCountry** column will be changed to a hidden state. +In the following example, the **CustomerID** column is initially hidden, and the **ShipCountry** column is visible. In edit mode, the **CustomerID** column is shown, and the **ShipCountry** column is hidden. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -323,13 +320,13 @@ public class OrderDetails {% previewsample "https://blazorplayground.syncfusion.com/embed/VXrzWVLAqtMKVgod?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -## Use wizard like dialog editing +## Use wizard-like dialog editing -Wizard-like dialog editing is a powerful feature in the Grid component that enables the creation of intuitive step-by-step forms. This feature provides a structured approach to form completion or data entry by breaking down the process into manageable steps.This feature is particularly useful when you have complex forms that need to be broken down into smaller sections to guide you through the data entry process. +Wizard-like dialog editing is a powerful feature in the Syncfusion Blazor DataGrid that enables the creation of intuitive, step-by-step forms. This approach provides a structured way to complete forms or enter data by breaking the process into manageable steps. It is especially useful for complex forms that need to be divided into smaller sections, guiding users through the data entry process. -To achieve wizard-like dialog editing in the grid component, you can use the template feature. This feature allows you to define your own custom editing template using the [GridEditSettings.Mode](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_Mode) property set to **Dialog** and the [Template](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_Template) property of [GridEditSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html) to specify the template variable that defines the editors for each step of the wizard. +To implement wizard-like dialog editing in the Grid, use the template feature. This allows you to define a custom editing template by setting the [GridEditSettings.Mode](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_Mode) property to **Dialog** and specifying the [Template](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_Template) property of [GridEditSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html). The template defines the editors for each step of the wizard. -The following example demonstrate the wizard like editing in the grid with the unobtrusive validation. +The following example demonstrates wizard-like editing in the Grid with unobtrusive validation. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -559,9 +556,9 @@ public class OrderDetails ## Customize add/edit dialog footer -The Customize add/edit dialog footer feature in the grid allows you to modify the footer section of the dialog that appears when editing the currently selected row or adding a new row. By default, the dialog displays two buttons in the footer section: Save and Cancel, which allow you to save or discard the changes made in the dialog. This feature is particularly helpful when you want to add custom buttons to the dialog's footer, implement specific actions, or customize the appearance of the buttons, such as changing their color or size in the dialog's footer. This can be achieved using the [FooterTemplate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_FooterTemplate) of the [GridEditSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html) property of the Grid component. +The customize add/edit dialog footer feature in the Syncfusion Blazor DataGrid allows you to modify the footer section of the dialog that appears when editing the currently selected row or adding a new row. By default, the dialog displays two buttons in the footer section: Save and Cancel, which let you save or discard the changes made in the dialog. This feature is particularly helpful when you want to add custom buttons to the dialog's footer, implement specific actions, or customize the appearance of the buttons, such as changing their color or size. You can achieve this using the [FooterTemplate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_FooterTemplate) property of the [GridEditSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html). -In the following sample, the action for the custom button can be customized using the `FooterTemplate` property of the `GridEditSettings`. +In the following sample, the action for the custom button is defined using the `FooterTemplate` property of the `GridEditSettings`. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -641,11 +638,11 @@ public class OrderDetails {% previewsample "https://blazorplayground.syncfusion.com/embed/LXrIDWZdLWqNBqts?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -## Implement calculated column inside grid dialog editing +## Implement calculated column inside Grid dialog editing -You can automatically update the value of a column based on the edited value of another column using Cell Edit Template feature. This feature is useful when you want to dynamically calculate and update a column's value in real-time based on changes made to another related column. +You can automatically update the value of a column based on the edited value of another column using the Cell Edit Template feature. This feature is useful when you want to dynamically calculate and update a column's value in real time based on changes made to another related column. -In the following sample, the `SfNumericTextBox` component is rendered inside the dialog edit form. We have updated the **Total** column value based on the **Price** and **Quantity** columns using the [ValueChange](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Inputs.NumericTextBoxEvents-1.html#Syncfusion_Blazor_Inputs_NumericTextBoxEvents_1_ValueChange) event. This is achieved in combination with the [RowUpdating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowUpdating), [RowCreating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowCreating), and [RowEdited](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowEdited) events, along with the [Template](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_Template) property of the [GridEditSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html). +In the following sample, the `SfNumericTextBox` is rendered inside the dialog edit form. The **Total** column value is updated based on the **Price** and **Quantity** columns using the [ValueChange](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Inputs.NumericTextBoxEvents-1.html#Syncfusion_Blazor_Inputs_NumericTextBoxEvents_1_ValueChange) event. This is achieved in combination with the [RowUpdating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowUpdating), [RowCreating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowCreating), and [RowEdited](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowEdited) events, along with the [Template](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_Template) property of the [GridEditSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html). {% tabs %} {% highlight razor tabtitle="Index.razor" %} diff --git a/blazor/datagrid/in-line-editing.md b/blazor/datagrid/in-line-editing.md index 0806fd8744..8aea5aff38 100644 --- a/blazor/datagrid/in-line-editing.md +++ b/blazor/datagrid/in-line-editing.md @@ -1,17 +1,17 @@ --- layout: post -title: Inline Editing in Blazor DataGrid Component | Syncfusion -description: Checkout and learn here all about Inline Editing in Syncfusion Blazor DataGrid component and much more details. +title: Inline Editing in Blazor DataGrid | Syncfusion +description: Checkout and learn here all about Inline Editing in Syncfusion Blazor DataGrid and much more details. platform: Blazor control: DataGrid documentation: ug --- -# Inline editing in Blazor DataGrid component +# Inline editing in Blazor DataGrid -The Blazor DataGrid component provides a powerful in-line editing feature that allows you to edit cell values of row directly within the grid. This feature is especially useful when you want to quickly modify data without the need for a separate edit form. In normal edit mode, the selected record is changed to an edit state, and you can modify the cell values and save the edited data to the data source. +The Syncfusion Blazor DataGrid provides a powerful in-line editing feature that allows you to edit the cell values of a row directly within the Grid. This feature is especially useful when you want to quickly modify data without the need for a separate edit form. In normal edit mode, the selected record is switched to an editable state, allowing you to modify the cell values and save the changes to the data source. -To enable in-line editing in the grid component, you need to set the [GridEditSettings.Mode](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_Mode) property of the Grid's configuration to **Normal**. This property determines the editing mode of the Grid. +To enable in-line editing in the Grid, set the [GridEditSettings.Mode](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_Mode) property of the Grid's configuration to **Normal**. This property determines the editing mode of the Grid. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -83,11 +83,11 @@ public class OrderDetails ## Automatically update a specific column based on another column edited value -You can automatically update the value of a column based on the edited value of another column using Cell Edit Template feature. This feature is useful when you want to dynamically calculate and update a column's value in real-time based on changes made to another related column. +You can automatically update the value of a column based on the edited value of another column using the Cell Edit Template feature. This is useful when you want to dynamically calculate and update a column's value in real time based on changes made to another related column. -You can update the column value based on another column’s edited value in normal mode by using the [RowUpdating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowUpdating) and the [RowEdited](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowEdited) events, along with the [EditTemplate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_EditTemplate) property of the Grid. +You can update a column value based on another column’s edited value in normal mode by using the [RowUpdating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowUpdating) and [RowEdited](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowEdited) events, along with the [EditTemplate](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_EditTemplate) property of the Grid. -In the following example, the **TotalCost** column value is updated based on changes to the **UnitPrice** and **UnitInStock** columns during normal editing. +In the following example, the **TotalCost** column value is updated based on changes to the **UnitPrice** and **UnitsInStock** columns during normal editing. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -197,19 +197,19 @@ public class ProductDetails ## Cancel edit based on condition -The grid provides the ability to cancel the edit operations for particular row or cell based on specific conditions. This feature allows you to control over whether editing should be allowed or prevented for certain rows or cells in the grid. +The Syncfusion Blazor DataGrid provides the ability to cancel edit operations for a particular row or cell based on specific conditions. This feature allows you to control whether editing should be allowed or prevented for certain rows or cells in the Grid. -To cancel the edit operation based on a specific condition, you can handle the following events of grid component. These events are triggered when a CRUD (Create, Read, Update, Delete) operation is performed in the grid. +To cancel an edit operation based on a specific condition, you can handle the following Grid events. These events are triggered when a CRUD (Create, Read, Update, and Delete) operation is performed in the Grid: -1. [RowCreating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowCreating): Triggered before an add action is executed in the grid. +1. [RowCreating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowCreating): Triggered before an add action is executed in the Grid. -2. [RowDeleting](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowDeleting): Triggered before a delete action is executed in the grid. +2. [RowDeleting](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowDeleting): Triggered before a delete action is executed in the Grid. -3. [RowEditing](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowEditing): Triggered before an edit action is executed in the grid. +3. [RowEditing](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowEditing): Triggered before an edit action is executed in the Grid. -By applying your desired condition, you can cancel the edit, delete, or add operation by setting the args.Cancel property to **true**. +By applying your desired condition, you can cancel the edit, delete, or add operation by setting the `args.Cancel` property to **true**. -In the below demo, prevent the CRUD operation based on the **Role** column value. If the Role Column is **Admin**, then edit/delete action is prevented for that row. +In the demo below, CRUD operations are prevented based on the **Role** column value. If the Role column is **Admin**, then edit and delete actions are prevented for that row. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -308,19 +308,19 @@ public class EmployeeDetails ## Perform CRUD action programmatically -Performing CRUD actions programmatically refers to the ability to create, read, update, and delete data in a system or application using code instead of manual user interaction. +Performing CRUD actions programmatically means creating, reading, updating, and deleting data in a system or application using code instead of manual user interaction. -* To add a new record to the Grid, use the [AddRecordAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_AddRecordAsync__0_System_Nullable_System_Int32__) method. In this method, you can pass the **data** parameter to add a new record to the Grid, and the **index** parameter to add a record at a specific index. If you call this method without any parameters, it will create an empty row in the Grid. If an index is not specified, the newly added record will be displayed at the zeroth index. +* To add a new record to the Grid, use the [AddRecordAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_AddRecordAsync__0_System_Nullable_System_Int32__) method. You can pass the **data** parameter to add a new record, and the **index** parameter to add a record at a specific position. If you call this method without any parameters, it will create an empty row in the Grid. If an index is not specified, the new record will be displayed at the zeroth index. -* To change the selected row to the edit state, use the [StartEditAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_StartEditAsync) method. Before invoking this method, it is necessary to select a row in the grid. +* To change the selected row to the edit state, use the [StartEditAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_StartEditAsync) method. Before invoking this method, you must select a row in the Grid. -* If you need to update the row data in the Grid’s data source, you can use the [UpdateRowAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_UpdateRowAsync_System_Int32__0_) method. In this method, you need to pass the **index** value of the row to be updated along with the updated **data**. +* To update the row data in the Grid’s data source, use the [UpdateRowAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_UpdateRowAsync_System_Int32__0_) method. Pass the **index** of the row to be updated along with the updated **data**. -* If you need to update the particular cell in the row, you can use the [SetCellValueAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_SetCellValueAsync_System_Object_System_String_System_Object_) method. In this method, you need to pass the primary key value of the data source, field name, and new value for the particular cell. When using this method, any changes made to a cell will only be reflected visually in the UI of Grid alone, not persisted or saved in the underlying data source. This method is commonly employed for unbound columns, such as auto-calculated columns or formula columns, where the values are derived or computed based on other data within the Grid or external calculations. By using this method, you can update the visual representation of these unbound columns without modifying the actual data source. +* To update a particular cell in a row, use the [SetCellValueAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_SetCellValueAsync_System_Object_System_String_System_Object_) method. Pass the primary key value, field name, and new value for the cell. Changes made using this method are only reflected visually in the Grid UI and are not persisted in the underlying data source. This method is commonly used for unbound columns, such as auto-calculated or formula columns, where values are derived from other data within the Grid or external calculations. * To remove a selected row from the Grid, use the [DeleteRecordAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_DeleteRecordAsync) method. For both edit and delete operations, you must select a row first. -> In both normal and dialog editing modes, these methods can be used. +> These methods can be used in both normal and dialog editing modes. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -448,9 +448,9 @@ public class OrderDetails ## Show confirmation dialog while deleting -Displaying a confirmation dialog adds an extra layer of confirmation when deleting a record from the grid. This dialog prompts for confirmation before proceeding with the deletion, ensuring that accidental or undesired deletions are avoided. The deletion can proceed only if the decision is certain. The grid component provides a built-in confirmation dialog that can be used to confirm a deleting action. +Displaying a confirmation dialog adds an extra layer of safety when deleting a record from the Syncfusion Blazor DataGrid. This dialog prompts the user for confirmation before proceeding with the deletion, helping to prevent accidental or unintended deletions. The deletion will only proceed if the user confirms the action. The Grid provides a built-in confirmation dialog for this purpose. -To enable the confirmation dialog for the delete operation in the Grid, you can set the [ShowDeleteConfirmDialog](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_ShowDeleteConfirmDialog) property of the `GridEditSettings` configuration to **true**. By default, this property is set to **false**. +To enable the confirmation dialog for delete operations in the Grid, set the [ShowDeleteConfirmDialog](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_ShowDeleteConfirmDialog) property of the `GridEditSettings` configuration to **true**. By default, this property is set to **false**. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -531,9 +531,9 @@ public class OrderDetails ## Display default value for columns while adding -This feature is useful when you want to pre-fill certain column values with default values to streamline the data entry process. The grid component allows you to set default values for columns when adding a new record. +This feature is useful when you want to pre-fill certain column values with default values to streamline the data entry process. The Grid allows you to set default values for columns when adding a new record. -To set a default value for a specific column in the Grid, you can use the [DefaultValue](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_DefaultValue) property of the `GridColumns` configuration. By providing a default value, the grid will automatically populate that value in the corresponding column when a new row is added. +To set a default value for a specific column in the Grid, use the [DefaultValue](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_DefaultValue) property of the `GridColumns` configuration. When a new row is added, the Grid will automatically populate the specified default value in the corresponding column. Here's an example of how to set a default value for a column: @@ -607,13 +607,13 @@ public class OrderDetails ## Delete multiple rows -The delete multiple rows feature in the grid component allows you to easily remove multiple rows from the grid at once. This feature is useful when you want to delete multiple records simultaneously. There are two approaches to implement this feature: using the inbuilt toolbar delete option or using a method. +The delete multiple rows feature in the Syncfusion Blazor DataGrid allows you to easily remove several rows at once. This is useful when you need to delete multiple records simultaneously. There are two ways to implement this feature: using the built-in toolbar delete option or by calling a method. -**Using the inbuilt toolbar delete option** +**Using the built-in toolbar delete option** -The grid component provides a user-friendly interface for performing various actions, including deleting rows using the inbuilt toolbar. To enable the delete multiple rows using the toolbar, you need to configure the [Toolbar](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_Toolbar) property of the grid and set the [GridSelectionSettings.Type](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridSelectionSettings.html#Syncfusion_Blazor_Grids_GridSelectionSettings_Type) property as **multiple** to enable multiple row selection. +The Syncfusion Blazor DataGrid provides a user-friendly interface for performing actions such as deleting rows through the built-in toolbar. To enable deleting multiple rows using the toolbar, configure the [Toolbar](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_Toolbar) property and set the [GridSelectionSettings.Type](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridSelectionSettings.html#Syncfusion_Blazor_Grids_GridSelectionSettings_Type) property to **Multiple** to allow multiple row selection. -To delete multiple selected records in the grid, first you need to select multiple rows in the grid by highlighting or checking the corresponding checkboxes. Once the desired rows are selected, you can click on the delete icon located in the toolbar. This action will initiate the deletion process and remove the selected records from the grid. +To delete multiple selected records, first select the desired rows in the Grid by highlighting or checking their checkboxes. Then, click the delete icon in the toolbar. This will remove the selected records from the Grid. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -681,18 +681,18 @@ public class OrderDetails {% previewsample "https://blazorplayground.syncfusion.com/embed/BNLpiBMkLcuVmJPN?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -> Also delete the selected records using keyboard shortcut key **delete**. +> You can also delete the selected records using the **Delete** keyboard shortcut. **Using method** -You can delete multiple rows programmatically by using [DeleteRecordAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_DeleteRecordAsync) method. This method allows you to delete a record with the given options. If the **fieldname** (field name of the primary key column) and **data** parameters are not provided, the grid will delete the selected records. +You can delete multiple rows programmatically by using the [DeleteRecordAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_DeleteRecordAsync) method. This method allows you to delete records with the given options. If the **fieldName** (the field name of the primary key column) and **data** parameters are not provided, the Grid will delete the selected records. ```ts - Grid.DeleteRecordAsync(); +Grid.DeleteRecordAsync(); ``` -> * The `GridSelectionSettings.Type` property is set to **Multiple** to enable multiple row selection. -> * To prevent accidental or undesired deletions, it is recommended to enable the `ShowDeleteConfirmDialog` property of the `GridEditSettings` configuration. +> * The `GridSelectionSettings.Type` property must be set to **Multiple** to enable multiple row selection. +> * To prevent accidental or undesired deletions, it is recommended to enable the `ShowDeleteConfirmDialog` property in the `GridEditSettings` configuration. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -766,13 +766,13 @@ public class OrderDetails {% previewsample "https://blazorplayground.syncfusion.com/embed/hDLStsZBUpReRDUm?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -## Adding a new row at the bottom of the grid +## Adding a new row at the bottom of the Grid -The grid component allows you to add a new row at the bottom of the grid, allowing you to insert a new record at the end of the existing data set. This feature is particularly useful when you want to conveniently add new records without the need of scroll up or manually reposition the newly added row. +The Syncfusion Blazor DataGrid allows you to add a new row at the bottom, enabling you to insert a new record at the end of the existing data set. This feature is especially useful when you want to conveniently add new records without scrolling up or manually repositioning the newly added row. -By default, when adding a new row in the grid component, the row is inserted at the top of the grid. However, you can change this behavior by setting the [NewRowPosition](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_NewRowPosition) property of the `GridEditSettings` configuration to **Bottom**. This property determines the position where the new row will be inserted. +By default, when adding a new row, the Grid inserts it at the top. However, you can change this behavior by setting the [NewRowPosition](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_NewRowPosition) property of the `GridEditSettings` configuration to **Bottom**. This property determines where the new row will be inserted. -Here's an example of how to enable adding new rows at the bottom of the grid: +Here's an example of how to enable adding new rows at the bottom of the Grid: {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -864,13 +864,13 @@ public class OrderDetails {% previewsample "https://blazorplayground.syncfusion.com/embed/BZhTCBWEJgzWWmwI?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -> Add `NewRowPostion` is supported for **Normal** and **Batch** editing modes. +> The `NewRowPosition` property is supported for **Normal** and **Batch** editing modes. -## Show add new row always in grid +## Show add new row always in Grid -The Syncfusion® Grid simplifies the addition of new records by consistently presenting a blank, “add new row” form within the grid. To enable this feature, you can set the [ShowAddNewRow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_ShowAddNewRow) property within the [GridEditSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html) configuration to **true**. This allows for continuous addition of new records. You can display the add a new row at either the top or bottom of the grid content, depending on the [NewRowPosition](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_NewRowPosition) property of `GridEditSettings`. By default, the add new row is displayed at the top row of the grid content. +The Syncfusion® Grid simplifies the addition of new records by consistently presenting a blank "add new row" form within the Grid. To enable this feature, set the [ShowAddNewRow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_ShowAddNewRow) property within the [GridEditSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html) configuration to **true**. This allows for continuous addition of new records. You can display the add new row at either the top or bottom of the Grid content, depending on the [NewRowPosition](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_NewRowPosition) property of `GridEditSettings`. By default, the add new row is displayed at the top of the Grid content. -The following sample demonstrates how to add a new record continuously using `ShowAddNewRow` property. +The following sample demonstrates how to add a new record continuously using the `ShowAddNewRow` property. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -935,22 +935,21 @@ public class OrderDetails {% endtabs %} {% previewsample "https://blazorplayground.syncfusion.com/embed/rjLfiLskTTrNxaux?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} - -> To save the newly added records, you can either hit the **Enter** key or click on the **Update** button located on the toolbar after filling in the new add form. +> To save newly added records, you can either press the **Enter** key or click the **Update** button on the toolbar after filling in the new add form. ### Limitations -* This feature is supported only for Inline/Normal editing mode and is not compatible with other edit modes. -* The new blank add row form will always be displayed at the top, even if you have set the new row position as the bottom for Virtual Scrolling and Infinite Scrolling enabled grid. +* This feature is supported only in Inline/Normal editing mode and is not compatible with other edit modes. +* The new blank add row form will always be displayed at the top, even if you set the new row position to bottom for Grids with Virtual Scrolling or Infinite Scrolling enabled. * This feature is not compatible with the column virtualization feature. ## Enable editing in single click -Enabling single-click editing in the Syncfusion® Grid's **Normal** editing mode is a valuable feature that allows you to make a row editable with just one click.This can be achieved by using the [StartEditAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_StartEditAsync) and [EndEditAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_EndEditAsync) methods. +Enabling single-click editing in the Syncfusion Blazor DataGrid's **Normal** editing mode is a valuable feature that allows you to make a row editable with just one click. This can be achieved by using the [StartEditAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_StartEditAsync) and [EndEditAsync](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html#Syncfusion_Blazor_Grids_SfGrid_1_EndEditAsync) methods. + +To implement this feature, bind the [OnRecordClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnRecordClick) event of the Grid. Within the event handler, call the `StartEditAsync` method to begin editing the clicked row and the `EndEditAsync` method to save or cancel editing for a previously edited row. This ensures that editing mode is triggered when a specific record in the Grid is clicked. -To implement this feature, you need to bind the [OnRecordClick](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnRecordClick) event of the Grid. Within the event handler, call the `StartEditAsync` method to begin editing the clicked row and the `EndEditAsync` method to save or cancel editing for a previously edited row. This ensures that the editing mode is triggered when a specific record in the Grid is clicked. - -The following sample demonstrates how to enable editing in a single click using the `OnRecordClick` event: +The following sample demonstrates how to enable editing with a single click using the `OnRecordClick` event: {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -977,18 +976,20 @@ The following sample demonstrates how to enable editing in a single click using { if (Grid.IsEdit && CurrentRowIndex != args.RowIndex) { - // End editing for the previously edited row + // End editing for the previously edited row. await Grid.EndEditAsync(); } // Update the currently selected row index CurrentRowIndex = args.RowIndex; await Grid.SelectRowAsync(args.RowIndex); - // Start editing the clicked row + // Start editing the clicked row. await Grid.StartEditAsync(); } } {% endhighlight %} + {% highlight c# tabtitle="OrderDetails.cs" %} + public class OrderDetails { public static List Order = new List(); @@ -1033,11 +1034,11 @@ public class OrderDetails ## Disable editing for a particular row -In the Syncfusion® Grid component, you can prevent editing of specific rows based on certain conditions. This feature is useful when you want to restrict editing for certain rows , such as read-only data, calculated values, or protected information. It helps maintain data integrity and ensures that only authorized changes can be made in the grid. +In the Syncfusion Blazor DataGrid, you can prevent editing of specific rows based on certain conditions. This feature is useful when you want to restrict editing for certain rows, such as those containing read-only data, calculated values, or protected information. It helps maintain data integrity and ensures that only authorized changes can be made in the Grid. -To disable editing for a particular row, use the [RowEditing](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowEditing) event of the grid. You can then set the **args.Cancel** property to **true** to prevent editing for that row. +To disable editing for a particular row, use the [RowEditing](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowEditing) event of the Grid. You can set the **args.Cancel** property to **true** within this event to prevent editing for that row. -In the below demo, the rows which are having the value for **ShipCountry** column as **France** is prevented from editing. +In the demo below, rows with the value **France** in the **ShipCountry** column are prevented from being edited. {% tabs %} {% highlight razor tabtitle="Index.razor" %} @@ -1068,7 +1069,9 @@ In the below demo, the rows which are having the value for **ShipCountry** colum } } {% endhighlight %} + {% highlight c# tabtitle="OrderDetails.cs" %} + public class OrderDetails { public static List Order = new List(); @@ -1113,16 +1116,16 @@ public class OrderDetails ## Provide new item or edited item using events -Grid uses `Activator.CreateInstance()` to create or clone new record instance during add and edit operations, so it must have parameterless constructors defined for the model class and any referenced complex type classes. +The Syncfusion Blazor DataGrid uses `Activator.CreateInstance()` to create or clone a new record instance during add and edit operations, so the model class and any referenced complex type classes must have parameterless constructors defined. -There are cases where custom logic is required to create a new object, or a new object instance cannot be created using `Activator.CreateInstance()`. In such cases, you can manually provide model object instance using events. +However, there are cases where custom logic is required to create a new object, or a new object instance cannot be created using `Activator.CreateInstance()`. In such cases, you can manually provide the model object instance using events. You can use the [RowCreating](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_RowCreating) and [OnBeginEdit](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEvents-1.html#Syncfusion_Blazor_Grids_GridEvents_1_OnBeginEdit) events to provide a new object instance during creation and editing operations. The new object should be assigned to the `RowCreating.Data` and `OnBeginEdit.RowData` properties. In the following example: -* A model class without parameter-less constructor is bound with the grid. -* Enabled inline editing feature in grid. +* A model class without a parameterless constructor is bound to the Grid. +* Inline editing is enabled in the Grid. * The `RowCreating` event is used to assign default values for new rows. * The `OnBeginEdit` event is used to clone the current row's data when editing an existing item. From 4c7e192651d722d7e87a65f559f4d685b33f3511 Mon Sep 17 00:00:00 2001 From: Nithya Date: Wed, 21 May 2025 10:53:56 +0530 Subject: [PATCH 03/27] 959420: Persisting Data in Server --- blazor-toc.html | 1 + blazor/datagrid/persisting-data-in-server.md | 42 ++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 blazor/datagrid/persisting-data-in-server.md diff --git a/blazor-toc.html b/blazor-toc.html index 772d84b852..68e2001ed9 100644 --- a/blazor-toc.html +++ b/blazor-toc.html @@ -1903,6 +1903,7 @@
  • Batch Editing
  • Command Column Editing
  • Column Validation
  • +
  • Persisting Data in Server
  • diff --git a/blazor/datagrid/persisting-data-in-server.md b/blazor/datagrid/persisting-data-in-server.md new file mode 100644 index 0000000000..cc0fa5bb92 --- /dev/null +++ b/blazor/datagrid/persisting-data-in-server.md @@ -0,0 +1,42 @@ +--- +layout: post +title: Persisting data in the server in Blazor DataGrid | Syncfusion +description: Learn how to persist data in the server using the Syncfusion Blazor DataGrid, including supported adaptors and integration with RESTful services. +platform: Blazor +control: DataGrid +documentation: ug +--- + +# Persisting data in the server in Blazor DataGrid + +The Syncfusion Blazor DataGrid enables you to persist data changes made in the Grid to a server or database using RESTful web services. All CRUD (Create, Read, Update, Delete) operations performed in the Grid are managed by the [SfDataManager](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Data.SfDataManager.html), which can bind to server-side data sources and synchronize updates with the backend. This ensures that any changes made in the UI are reliably saved to your data store. + +> The [ODataAdaptor](https://blazor.syncfusion.com/documentation/data/adaptors#odata-adaptor) persists data in the server according to the OData protocol. + +Syncfusion provides multiple adaptors to handle different server protocols and APIs, enabling smooth integration with RESTful services. Below are the various adaptors you can use to persist data in the Grid. + +**Using UrlAdaptor** + +The [UrlAdaptor](https://blazor.syncfusion.com/documentation/data/adaptors#url-adaptor) is the default adaptor for connecting the Syncfusion Blazor DataGrid to remote data services via URLs. It enables seamless data binding and interaction with custom APIs or any remote service that exposes endpoints for CRUD operations. Use the `UrlAdaptor` when your API has custom logic for handling data operations. + +For more information, see the [UrlAdaptor documentation](https://blazor.syncfusion.com/documentation/datagrid/connecting-to-adaptors/url-adaptor). + +**Using ODataV4Adaptor** + +The [ODataV4Adaptor](https://blazor.syncfusion.com/documentation/data/adaptors#odatav4-adaptor) allows the Syncfusion Blazor DataGrid to integrate with OData V4 services, supporting efficient data querying and manipulation. You can perform CRUD operations using the `ODataV4Adaptor` to ensure compatibility with OData-compliant backends. + +For more information, see the [ODataV4Adaptor documentation](https://blazor.syncfusion.com/documentation/datagrid/connecting-to-adaptors/odatav4-adaptor). + +**Using WebApiAdaptor** + +The [WebApiAdaptor](https://blazor.syncfusion.com/documentation/data/adaptors#web-api-adaptor) is designed for use with Web APIs that follow the OData protocol. It extends the capabilities of the `ODataAdaptor` and enables smooth communication between the Grid and OData-based Web APIs for data retrieval and updates. + +For more information, see the [WebApiAdaptor documentation](https://blazor.syncfusion.com/documentation/datagrid/connecting-to-adaptors/web-api-adaptor). + +**Using GraphQLAdaptor** + +GraphQL is a powerful query language for APIs designed to provide a more efficient alternative to traditional REST APIs. It allows you to precisely fetch the data you need, reducing over-fetching and under-fetching of data. GraphQL offers a flexible and expressive syntax for querying, enabling clients to request only the specific data they require. + +The [GraphQLAdaptor](https://blazor.syncfusion.com/documentation/data/adaptors#graphql-service-binding) simplifies the interaction between the Syncfusion Blazor DataGrid and GraphQL servers, allowing for efficient data retrieval with support for various operations such as CRUD (Create, Read, Update, and Delete). + +For more information, see the [GraphQLAdaptor documentation](https://blazor.syncfusion.com/documentation/datagrid/connecting-to-adaptors/graphql-adaptor). From c67367c0b07df845ca01778aae968e3d226695f9 Mon Sep 17 00:00:00 2001 From: NithyaSivaprakasam <103498896+NithyaSivaprakasam@users.noreply.github.com> Date: Wed, 21 May 2025 10:55:54 +0530 Subject: [PATCH 04/27] Update persisting-data-in-server.md --- blazor/datagrid/persisting-data-in-server.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blazor/datagrid/persisting-data-in-server.md b/blazor/datagrid/persisting-data-in-server.md index cc0fa5bb92..1c3af7aef3 100644 --- a/blazor/datagrid/persisting-data-in-server.md +++ b/blazor/datagrid/persisting-data-in-server.md @@ -11,7 +11,7 @@ documentation: ug The Syncfusion Blazor DataGrid enables you to persist data changes made in the Grid to a server or database using RESTful web services. All CRUD (Create, Read, Update, Delete) operations performed in the Grid are managed by the [SfDataManager](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Data.SfDataManager.html), which can bind to server-side data sources and synchronize updates with the backend. This ensures that any changes made in the UI are reliably saved to your data store. -> The [ODataAdaptor](https://blazor.syncfusion.com/documentation/data/adaptors#odata-adaptor) persists data in the server according to the OData protocol. +> The [ODataAdaptor](https://blazor.syncfusion.com/documentation/data/adaptors#odata-adaptor) persists data in the server according to the **OData** protocol. Syncfusion provides multiple adaptors to handle different server protocols and APIs, enabling smooth integration with RESTful services. Below are the various adaptors you can use to persist data in the Grid. @@ -29,7 +29,7 @@ For more information, see the [ODataV4Adaptor documentation](https://blazor.sync **Using WebApiAdaptor** -The [WebApiAdaptor](https://blazor.syncfusion.com/documentation/data/adaptors#web-api-adaptor) is designed for use with Web APIs that follow the OData protocol. It extends the capabilities of the `ODataAdaptor` and enables smooth communication between the Grid and OData-based Web APIs for data retrieval and updates. +The [WebApiAdaptor](https://blazor.syncfusion.com/documentation/data/adaptors#web-api-adaptor) is designed for use with Web APIs that follow the **OData** protocol. It extends the capabilities of the `ODataAdaptor` and enables smooth communication between the Grid and OData-based Web APIs for data retrieval and updates. For more information, see the [WebApiAdaptor documentation](https://blazor.syncfusion.com/documentation/datagrid/connecting-to-adaptors/web-api-adaptor). From 970d6d42a9aadd7b4b069a6c24dca3a78058573d Mon Sep 17 00:00:00 2001 From: NithyaSivaprakasam <103498896+NithyaSivaprakasam@users.noreply.github.com> Date: Wed, 21 May 2025 13:09:35 +0530 Subject: [PATCH 05/27] Update persisting-data-in-server.md --- blazor/datagrid/persisting-data-in-server.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blazor/datagrid/persisting-data-in-server.md b/blazor/datagrid/persisting-data-in-server.md index 1c3af7aef3..6277588dd1 100644 --- a/blazor/datagrid/persisting-data-in-server.md +++ b/blazor/datagrid/persisting-data-in-server.md @@ -23,7 +23,7 @@ For more information, see the [UrlAdaptor documentation](https://blazor.syncfusi **Using ODataV4Adaptor** -The [ODataV4Adaptor](https://blazor.syncfusion.com/documentation/data/adaptors#odatav4-adaptor) allows the Syncfusion Blazor DataGrid to integrate with OData V4 services, supporting efficient data querying and manipulation. You can perform CRUD operations using the `ODataV4Adaptor` to ensure compatibility with OData-compliant backends. +The [ODataV4Adaptor](https://blazor.syncfusion.com/documentation/data/adaptors#odatav4-adaptor) allows the Syncfusion Blazor DataGrid to integrate with OData V4 services, supporting efficient data querying and manipulation. You can perform CRUD operations using the `ODataV4Adaptor` to ensure compatibility with OData-compliant backend. For more information, see the [ODataV4Adaptor documentation](https://blazor.syncfusion.com/documentation/datagrid/connecting-to-adaptors/odatav4-adaptor). From 2b0c8a1ce970f65acb8864affe41b97bcd7b262b Mon Sep 17 00:00:00 2001 From: PrasanthMadhaiyan Date: Thu, 22 May 2025 12:25:45 +0530 Subject: [PATCH 06/27] 826671: Need to add styles and appearance topic in the Blazor File Manager component. --- .../blazor-filemanager-custom-layout.png | Bin 16577 -> 9684 bytes ...azor-filemanager-custom-selected-items.png | Bin 20610 -> 19682 bytes .../blazor-filemanager-custom-thumbnail.png | Bin 15950 -> 15280 bytes .../blazor-filemanager-custom-toolbar.png | Bin 23867 -> 18086 bytes ...filemanager-customized-navigation-pane.png | Bin 23908 -> 17250 bytes blazor/file-manager/styles.md | 28 +++++++++++------- 6 files changed, 17 insertions(+), 11 deletions(-) diff --git a/blazor/file-manager/images/blazor-filemanager-custom-layout.png b/blazor/file-manager/images/blazor-filemanager-custom-layout.png index b05c23ef772831bb1d4c6da64be16cd693db4db2..dce748e7b58b88970f3656affefd8eb91f7e6c0c 100644 GIT binary patch literal 9684 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 D{zQR1 literal 16577 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%0Ay`@-1bP&O51Bcb@$Gdb~@(9Ok_XBtk< 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 I^EdAQFXXQ&Gynhq diff --git a/blazor/file-manager/images/blazor-filemanager-custom-selected-items.png b/blazor/file-manager/images/blazor-filemanager-custom-selected-items.png index 8203a8679bb9515ef8236816cbc00dbb1c018678..283883b6b6110e0750b4c4594606b8729480bd1e 100644 GIT binary patch literal 19682 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 literal 20610 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 N_H^}gS?83{1OR{afMWmv diff --git a/blazor/file-manager/images/blazor-filemanager-custom-thumbnail.png b/blazor/file-manager/images/blazor-filemanager-custom-thumbnail.png index fa086a1f2a04abdd913c8f2a76cb70d6d63f9d40..28aad486d346de9563870ebdf447fbc4967080a1 100644 GIT binary patch literal 15280 zcmeIZc~q0h);AiPR*p>zr<-m$C_~#Sbjzenk=fxWO*5$|b3mIRLKuV)!kDNyw5@=G zfD8c@nIU0HAYq6TLVzSpAwYnrghT=%kN`3B7y9(K?s?zu-gW=G-*?wKYgLA)@;s@k zy?0gp_HXaHch1Xo&sY1t0ssJe+h;M=6_*N*u}!xR9(;f&iqPhLz3;mxIY`@(Km zD6|fL^;OlA)E%cz?0z_0wjvPLzKHtz#!`xIZogHuopH$z?yl^C$K#|i-CqX7BUfHL z;-qBQa9KNl9CH7C91=O!a^cHUJI;FycR&8=rw1}c%GP4)M zZJWw3Rh8=hu>btBP#F&#&~H~daKSqOfMzv08_%@)($3RFb@kQ30oD6=XCJBo06#tW z^Y5O-?q%&ed+th6$6@K4!k8gk$Kl1c!;CRuteZHFgo`m8{9Ce@)6&#@o~ZROBQBP~ z?TM-Ufo{@M-!@f6+qz4hHd%3ZLbX;M+{#8V*hLm2(9K36pIre?E~K_Z1vw4SzUANs zQIBK8I<~%+UT}MCrr#33GE4C5Jwc^Gsl+)4>WXPar3o(WAwv?7k8*==<*qgk<F!Ltf>7K)9MCPBmR&g=o6PSpd~*6u?(ieN zVgBh|E538lU1BnnI5hG~9VhGRSI4`?6C8o82O08}N3=5|u^2~rO2{l{WE@@{P-R^>sQvM)U0)b5Qbpc$z*)&uM1m*AF+tgrQyOe&FqL2mHwb}uk z1oGen;X*(V$ii*Rm~RL9m7+ghL%1wWTYnX-bK=6bQe#2zy@eBQ&Qv7V8Q0fjq^*4W&uIA!mvtYggAWOr<@iSuk+Levj%tB6B=IB zQBeJX*@qm1ZZkS1AP*+h&nH#rm)>A30ju`0aN`xX^=s_jMr<4tzq}s)@_awbDL&N^ z7%G>`GCX0iX}4TtkVrZ2!EAdo0bm<(+EJv#OD)KknbMJ8t;-)7vt!v9{If zK$g|}Y~w^KnMtZb0v$w-a}(=3uE#N;)a2;VEpDk(gYZHr^B*7cUU*AvX*0Z|81vyx zX66r6p74VQp4Di6r}NOXnbZ(=wpuQ}YxQ2Np2+jmaHvg~-TD%5z%L$lmiOq|uzPf2 zl05;JK(o)(6G=}*?DlEuMVKyVO?lDp>#}gkZH#hA9W+?)cJMVaJI0EJz+cfkB zn0b&s+hw2W>OFk82vp+k3_I)PwDo(&`+#1x;6OL>u1 zebQmf2gqtahJ_;hD9lo7@6MIM5Q<#M!I@H?*-3BaM*fnnyGo|vmklw)RiR?9)ifO8 z=#tat%Hj;kGg2NSkw@$f26cm0W=_T_s!+RL>>Ri4$zY@zwRsy>EFFxDSbrTFvEIaq zJO}&U9>)$9_7MI~zXrUDAsiJc6*ia&3x)@ZXQENfdwIECTQ_Cu8(rAiQ$5GTt6R*o z;O3p52OCf1$-T<&3hVa#tX;DsZCT2)ksp5^u$Nc(qPQ>|l;Ez+>ZvnV+n0T7HH&TAX zaIo_mS_Ev%Fu(HdDoT;AMV@lub{>hCaCLcnBi?jat`(>BHMkjkHu5#;VB4qq`viHV zJC)wm_R2DOIbYG`2X1W$v`P16M`rY9o>^p*rcB^XGml(kKe}|Ldc`SDI*gND2C2$( zbC>%AiO(jPO`=u(i*K+TGxhL~pN}ocWkmM;VcP8=_LNCv#HqsY)gGs{T?bz7oi^+0 zIh-nRVR!V5isExQ_(NT^s{8ZtZURQXu#HR5qEe}TMyc*V3L|J}##Q*~57tAGA&s=> z1Dw_A?MY(F7VYfNu#88zE$1VK|0r>6SsUdcDt#WhTc(Y%JO=VSh`w#WPfH;gEcEP} zJZN7{y2HMi&h$c;-b1=}mT&4cl5OIp*UXR0N0OskrQs7xN}K+kCVQlMS~8+nToBKa zkeB$jg4&Fy%sY;RwRLWunYC%9ljOUppRFCbstpMf`DHZ+Aq@^NmlNN;tChpiPg~dx*gw3 zSP!$9j~X*9y)Wv-hB=rI#QGQcDVnRtqj-`-%XC~ZbG|*fP5pp_kyT{2_iEW}Uk;Oo z_y#6Fzz!`rA6qhEy+`jn&&5VLrYXH(`ebYV!9EwO`+38tV5!3@T-=4zRTH>k#T=N7-Gm>0h@$P8cHSu-$8bh75Ph%nYGu zE|u)bu#BFM)K(j}<^}NzQo-A^%1EE_`KJuvOFT8=s_+vI> zaZx;EL7`A54=p3ba@nGe1vM10UNXESfW!<6Oat@2-aq4iKZut;9cYdf^6vSWxmj9N zpdHGAndrHVRD0eEkcSH0M~~_VwEo4pE} z#o}^Nd4bjnsADx*FgRpkJZ;RM#SmW16J%TWkR&pYN+P>_E^=&RRG0GjM5Z&T)PmE; zoBb`~?oPb%YPXRRA_3Z?;(`jpr$Mpo4q)cuq}f$NtF1xRj0|68;aqO*DJLAL$u2Hi zgk}C1Ek96#+waheGP1!MZkiSsbuA-)(2<3QBnm$31$9KWg<(El+Dq;FsWRW=D)+N< zSWKY#j8}KGfA8F!v#!vBTuaE=xUZu)0!Lm3OkZBH!aXU{u=o`n^0~n@S( z60}ES>5rOY1O~q0k*iyPdDrT(p&~v7}EqZ=}(+fV#lE~7bW5uIM8Ac1G zIejL}i2XBm^yCkYJ*wRnXNRltm1GU0Wb=12ml?(us*%v3PA@47SUO?sW~KKogJVYO z{PIItR^iuRsp*puyvfdn**y-X1Nw=A$1?JSMUp+r-jTGHu&r)TvZU}5by8w8JXFKz zYMXl@e*K9{(7>>H=yJJ7UYO-ND|}RoAJy}>G8YS|YYz3+Blp(Ys^<$ghVf9VU6#cz zCgVj9s2%$eto$&{lcKtVK$_!5@o>3~#rDGf-QOU)P)cv{7HM-CwrFJ=kmvCv>JZti zHQe7k<{#M`Pllhs&!3I2_pKe0zI<7Rge=%+Q7|?KQa&+bExpA+K5rXbKaBvAd&Y@c2jc<1zqRLr?v%-uB_Dnx?sLXu+#_?-0 zMsyoPo`Yb5taxxAy)V?S5_aCQ&2n%}7Es(99$r0JVNn{t@1m$^s~w8w4W_1v7u=5k zHPqQMlOvp!e6Y<*P`?-9r%EdesJ*=s@Ev*%{2t5E^5&3i+_s#5Q19SDMsl2&7*(6N za{axm)}V?FWDwD-rne`5W0et!NcUlyty-jdn0KeBjIL2L8dvg~&WcW{+q~<)k;3D4 zPC7!|-1GZ(x)c|U8dj9uJD7)ei6RUjqEidO;b-A(R$l$s6n$oacZusuz2e=*?L9)5 zl@SSG7E7ISjPDHWG#d{I=!N*-IULaYT+U9On^)gg66ZykCD21){BF~IcFxAQpZm)h z{b0E;w}W>X1T;e++8F*F`_d!ao7~JsXtczn&nO#1X|@eNsFDgw2WITrqhA=FTIf`e z6aPa*hWW}190r=H#UlSM^{E3?IC`z-%t+eN-j4@{xra%kV<0+j7TPz zB~x4bn8l^R4Ij*LmCb5DEri*@`6~pbjTv4oY*apip82KvOr~z$V+em z5!9pWzd2Fwn14up&#z$O3#yayf}pU+>av6A05jnv`tH6Y#c*KL*~PoZqclUCGA9FT z*0aeY?^Nbr=un~+PC;P-uobt3AoErr?ATNbxHTpU7NTPonsc213dIzzk`7E6jBhuW8nq&%DD8debQpmnjti@&j>WNj0r_YG7$y zmG~kL{b{zsab&Df@D^^P-n|&GHDQI9-gURFB#poPnmHjfw~d$@nAr2hVIFcXjYMRLHN`oA-wlU1<}9&~SH@;`0G1NY(}=sL{Y zt)&2F0LYU(MJl#$#UocEZRgA~B+zd@jvV?Ljw;pg_Hu8d z7lv)I2HSQARlj3XL1QRk5|oz+RWfWdQ9B4>r)|57^<=JL!W##3ua-F{UET6-eYRRX zBLU`j3rF-oAkjdJ_~pYx@o~3(t>)u_1;rp}*v&lsgIK-O8tr&d6{%9BO7c)jSHVHul$2O!T#=LpY(5FZ4 zmZJIe*4nJd98{f6K@>(DZl;%Y@tKI7*S_H4dn0|9}tCy#x)wXQER zTdIwMq(|5xL)dZ8r+JZlwI~G7H|vfjgz?=`GQYzzzLeo`_iJ7e2O&WXcXlP8RLmUg zVEqwPbm&da;3Ebee`>!c_D6jLn2fzVhmPV0r}u~P;%W4W35vsgM2h#`;qptmF=56X z%BiyS6$imbqKp}=T&uqGdz^q>B9py~XN~DXainvjG{vO8VOuE#N*VXW-ZmpA>`1

    uv#u+IP3e;tw1YpdeT?`6oKDq%`M*~zindli0TH04Kf)rPhA{vd!rJZ(-2x8-M zf$UGWVP$YHCrwLFFA+QvTELQ@lEw9z!~iPJaR4svF%@`w%VQR&vrK|5mbK{<$1DNI z&(#&i>oMMAPxj{qp0H}VOlFst2=DcY`VVzSJBdmYj9sr3R1X8?Y7spHxe_pP;BH^GdlL6Q1ks`Kel*y+!QtWSrLfi#^xQ8BT`!+cF0 zKgw{}jlJ{DStI+xx-9Trt*Y&IxI3>_a@?@|#ooo0fPl%V$SkDisQ*$on=pM?lJVuQ zS0;x!rH!4$IW8}ck`=X8NDmK6TOp$dPg~9#o;`t#l9P?~s&u#@Du$%3QunF%;)}-l z$1=a-b@E6iPgBAigI+b=;vc1K)DRP|^%GBsr|?4dd$kI)K@OD#^+QP8!ifQyboF)> z2%qFGHGW5ql^iy{y!yR>B|%s`Rm3U=f*MtJXf;~2&X4)}Rb!UaLtf4?X2P7IOCxb0 zcP@yw5$&|X-!)1bDQ#P86~gm~qr8uWZ1dVSo9;8u%4sw~CDNg^>lIm%1U@%%g<*dK zyud%IxoB4wGZ?hiD{dcV?)z*oCzy|VOuhWg^W-v|H1@H#W{s3}QpV%U7(XNW=!%M+ zB07T~UXE$_Rv4)Ru2o}T>;Lie=l)^RZY}YPi(8wl_UFy%nshRI!|H-W3Qdswaa$x& zhN?3a_=p$;Gd&Np+p6J!j)$x(5;tutpjfu~rICOicOM%lJ`a8#i?DW8WcK6=LxfEMj z9`TgDh=uW{oFfQ~MI$CI&!lxvBXMrqgouhIp;@;bcJ&9$47PXu7nSz$0iOF;N6NC- zt61z;K9-z=0grKqWCjL-PNxkTDy+m~us~QK5Bn1?t&C7bsW5l>fPVDxvBy&l9jdfi zDDZM|YG7)sC#CCL8?JQr(c3|q`msq*-h9J?ij1eIvk`xbjm<*02FiwM<-TUslp3#q zWVZx|VUR5F1^!2<9gYz?j?cYShCv-;clnx1nXQ}b%2>F?YkSXH0`%zkL;%AizUScH zs9$#OdYt;F&2w8?HaiH|#X)Ent5v-oMo1o0uE?*vv|uJ#%HifTFtFtMZT|!kB}sKd zJ4v0Nh0JF*aC0GWi}5YTCEZY;{jO3Qx~*}4*CIj7uG~^nF5EY{i@4dzzcP2YCSOYt zGjR45JYreJLvs+6$?l-ta@kz$p2Rf}NcFRTe-!9XWDyh@+zmqf2e7ggIMUf^vAf`C2q2{%SU5nq;#DJX#CUPhotjtRe?Rz%oD7A}3bRnKKfuokBW79zMeE{+`59!^UjhD>(m7wG% z^}7%rxJG;}q2t9_%VlUrs6XzT0UrhU$U1vK+##-08Dv26PkQ|iFHHmhbl>WgvduO ze)zhfUz^?J#4aY%(9!St9@(x#PwYCAbV?Od8kQvS#(S3@Q1YgE7F##DB=w1C@*33l zEYq?kmCYUL5tGal4rfI}CtT7A&y~_mLA-`!+^-+u7ixeRPTW)FgL0%W@l&{-@CZfWE zCheVyNq4KsM#4uMiUx+RRJxL515{JkFpJczzs=zPB69iI*HCMc#rVWiGG}^W$y_Z1 zd_BF#8gs>L-$2Xwcliqdx3}|s5SDo1#%D6)qc#nnh;SWp#Xbp#EbRrOH5+5x5tm?B z#i=Glq+5`GYYx%5WCcH&Ha6L>n)2GJ_Gbkz?#GJ!FddK`UP-i2GDrf8p7 z)x`P7o{`^n==}mAsnS)wZAhYraU_$z7gd}6F6c1s_>$2M3gi8Vrrx3_En3N60J`KZ zcPm`OT(`NeGDRnopZx90IT-ex_Q}rmQrW*v3$RS1DDl{@<`oJhN;znp>3b!aLE0^3 z8;3c{PmK&S4tam&AEokS2tclr$}B8h{xJTBbIGV1sx?~pq3v} zZ>uu+JwiJRZu!jx?;#{dmZp?PKH310+5}P3_+3hEuR9XK1@0UbeAkM-IX>e#6cRC# zMw<0eE>6RF)OE|>2vD))6kDU7ow)~TJb-_7q-k_?y%CvLteSeD-+ALMIf+&-i!&!j zO;WZT85#(8{jk;iq0c)ZQP~X*JKmLYQl7%9X`-#lweJqiYrBHK9d&gLUH25uz{+=S ztjBedSb@vm741n2^ir9Jhe20iyU7bZ9b+vWkZ?XK1AMAJ0i?ATv9<8B8*G=Sd^dT@ z7YKzX*SoGPVTMgCNu2Cflb?Rk70NG*Dif36PQ~%L2T@79 zY_NEBs5V*ef`7n6*~!8+?SOz{PL(vZA5l^LOEHR%`ieOs?21jW~IbAuP=_ug^GHLBcC6w>0? z{eqURENh|I@M^SBb6#e%bw~O_Vv^5M25N^gs)q4E>Rw7IE3;ze7RNsmwJ&Gi2DER78;JW09 z+W9Gd(mJ%4O*)cN+xUy*V52>gXL0S$f{MiPJ6{afm~T z&##!x2_TZf%KXBXsqJ{1uJWcr8YYe@$K85&O&6@*E(pM1oZprpvgF^6T7GThF(+E+ zS}^A&9KNaZN{p{aRm#FWT)?7;`HAW9I!UiSL$MJ~!*6KVnJKfn zshOZ{O=bpJ59gv)50-yz>p=ox7D9OzuRT^C4C2CWYhidvxpFPI_ad8tVXo0;$T6t1 zWT-HlC-NafjUXv^NK|SO1OojoL;U-~p}=E*RduZ{R$M`6dCX+dAJtdcEWJ3 zhl7Ko@+I`|(5{0hVsI(*(O!0aPI>wgsmrRZxAK5`-y2pbXGM(uGenhWaZi|Lyt=;r z@pN?{&7>#7(8MnP21*G(X5FpF3x4)}H-%svz>aG;v+) zXb*-}po(lt;{Cl?`g-cg$$f9bb14|VDb%9`mYU!i2ELJ9940*~8+8?})U>;ajNtvL zbCe8Dj?ujz(d9e?eIBBA`!DAS1Yq!A_WwwTS;U5aJ`E1p8~jd9A%0$4n)E>H2*7u; z7uFo?>Ms^Y$$uB+4laXU5-ig{-$bl=e#QGwAlXr@Lia1oH0(?!)1u(zE3 zY?e)>*-Jfx9jr>5qDKaH1#9cf?xRX^*I07W^XjZPlWT(=cMznqvR_jyu9 z5r=i8X;SuVo3yP8EUw|OHJJRo5qz+aE74MViA}_syn5!CEXb+YE1)BZ?Bml7*edo5 zCE;a!x`D36po6^)svc>now_C->%!4g&aTfg3rvf0Q^5~0B-4#qGKo<|yI$<2{FiiZ zc+@nm`RFmx2*lAIm6&altRcTyiJEk+iTq&)PfVp+)Mwm7bW%Mcz_$pBxF6X>Ic`l^ zYJ%eGRA6wr!4S3J19LT~-^-{v9kC~<0;Wn;l=)hS$YdBn?ytgwMXg7H=oz74Zlhy+ z*gdWGutdFbZ3gk9w|H6YuK5lG=awx`2@zi?F1#-S#)wh!)dCGf@gR0<+HJ4^>HUzcJozF zD(X0-ae_UgI;8)4t<`6TnQ-q*--6l#QPtBr>((E3T!Ph6$2_D(5eGp5j3|Q5@oZfY zd$$}PYyI_4&ZoQ8x+0=bnKusEhK3qed4aJ!Xe6nZXv%g$+~keiEI~(!)-(&lZ50Ur zS?1Wq_G+z%Y*3Zce9zps!$ccI%Pzi{kYrll4)1eOc){^~%fXq%XHp&(LAx+ht=nq;4{sKZ&oT4HjI5r+n~!*=1efr!M<-U!9axZ4;)M<+@Q$Y&NI7s z?$#1qL8J8-p6Z0*=5x#3&FS0jin_Q^&RXR~xikm&7<+lZQUebU0Xye1`=BxC`VH#L z2dx~`O$O%+`n}FKuI~|#K>}+EtJHXG+avoUyR|4R->rOP6KYTu8-+9>N_#a{gU`6# z#vzm^h1+f%iUP$sC*cMz_2d>ix&b1nf!aBP$MRa!c{b7K=pu+lol#Sn&+H?QTCcp+ zd+Z|Rr;*{Yb|V{pO~!$G-`1x4Tdld?)x4q>EzZJVc~LHWEX$ZVLj(1~aGF@BHw5?u z{aiG{!n%(>xTniREXj*qzd=fc)U_+w?&{3arlDLrS(BhiSwDY&TvsiycJx&BjnKBf z6M(2fZpbF7XG_BaQeQBQu3~DX(f(NP!L_55s;$w5khUqss6u@<)dJ{8t)j~LMpV8+ z;sixhIIU(up!te8tPP7vsZo{GBoIv#LVxF!y`#DE=EPDYeGYTvvL3kB$PJfK>y(U` zYGgi#)R+yZh)@!eJ~_K@shw>Y(>oU(mNGo~^T@(NbA<=xkrtPPr&_geg@=XB* z9ou=@H@j+wk6PT@-cV9h$W)5W;P<8-bV4`V;76>g}JYm{mE8f!_YUCo}mIu&Hq$ z62m?U^XJRU)<7TjH8Sn3M~ap{fr-QB_ZHVDt8Ltd(n<)$)=&F<6qWd;pKY`Bs|xt^ z-OtiV`u?(Vvmjc3|i!;8vJJi6^^0G~XXq`awBU>+g8C_0DfWT!I4~y+=0o_onJv?z z{#vaE{k>!T5tqfaUArYqf3X-18ll2lM@mkYTL=-5gJS{UoRXI4{FIdTHtlJ$zf z1GiDhg}Kn)D!p;82w-J+rG4)2lSl1ze~?zYcs_jB_@2r2w31w(QQZ418~84XZHKS@ z_!KRuO1|nk8b+B&cHFo~$Hm1r*xz*+@sE6niy8_UxaH0*{^$ez?wj<_VAb}+_DSj{ zD^?%|*Y8YTq*k2>J+J6|hEMnQ(eucvoe?<>&7@d(y!frcyS1Bgo)8+QQIb;FdMAW?g3HUw z9}+~~hl1}Y+LQI(O^V>bBwf!TyD~|$5}UfcVPg}f*>I#|J``hCd~ZWEsNAq$QDGUA_**G#3}yeUZv zcCti6qwXb3=7zB!IR^>L7UE?>oz zgImu*k_PihmK0`FvXsxPYvj5jR?Ta<-RHwvm0fpM0Q*UuSc%e}`}SNCu&QY2#O{^v z1e!rjE&iX}Fip+sd`s8qJ;`O|p_9YO4K6=Wo?mS?izbn;b%^hex@mM~E#BJV>2LFF zF5s2YxiR`H9BM}v)z|UkA(Y+gk<=w%@(unn z4-i*M63FA(+3&sKvY>U08J|B}P_X>?;6Xa?oFuccRjP@dy46oLv4cSTd6{8z0k8@jhBRY5N}I7$atc96u!LSffO5c&(XQNb>FRLJ|>?Y^N9= zCLbcIknO@X#m>2HJ*6vB$2Pn!=%ZSy4BTl8AtL&~%iswoH?Q;exSOieKRdr4wrC&* z@tI`Z+dYbqCB;mz*aEptTL&bV1N}Vk6+4h|yZNc31v3E#89sPlnaf_R=yK57H8fZmD*CV{(T3+@^lN z=1Bur*eh|O2DpoMu9$}Ui6bGta?Z{c=>tc5LYN)Zkz?uMWr`b=#h(q+gjU-%OBF4j z$B(U}KY}C38}{hvI=vOBY-?uTN37{}Hp242(>D-ApL?%J5?!xy9R>Y- zBlB*umn{*8c@6GWzTV?Nr)71Y;(KI7KvQ*REB01O0!Ue!-}>>!$~=FM;7S{E4aF4{ zZI?F10ukW2X5A!5)Vl|FDmyzKtv{CiaC-E-2$zMG0A*xDzr7*&1{CD_>`0ML3AT3H=6u;?qU|LAC=#B0@(%-5DtL1Kp)p zt@wouJQowo;s|XvCr4~3l{t^z*)Qb^@r#in1&ZG?Qb2tfe3GFE1Sm1_j7v4RY;8lz zH)O!hXM)G)8_fl>WG$a9sV=b{*P;s4-xtz@riwTg^_5?3cbRGwjf^_=(*@V%&v_Zy zser}!?TCZQX0M5Q3ZAZ8|FaNjTS4 zi6f{PDioTM`l7bHa#D12{-39uMQl_W#YDBSu|gwS$^c|*anOXLX7GN65-vs-oDLMh zoR-aU)=I1n#t-5(Y__85l_=btj=os#+Ak2|9Lo7ty6FP3&Ih3LBj+M-j!|EJjVo0GoyB75=p!2*R`0#|^*IMy zjeA9^woM#m3NK2YY)v-K?QiYHTY1H)SF~10n6?^~pcX!R>W0V3sQS>MV`zWUnv%542LfH?)gzCTL1Sg(8g;WmuOIM~P#%C4}my}Rv6 z3f{Lw+DPu-gWoc@n2YLevMs<=vUCUYpQS%+AmD_RLG)9MlXzMx##nk}bh6-U1kCX# zc0ecMLWK5OPa0%ZZQ6pA8JpZ$ECD*Z6G^Hj72T67seJrpz0=A28`Uh$N^kX3rN6)) zvN_>4!ej@2XY%(?EX=_@JNT!Ih362I#^N|100BY~!t*n~21iWz&i5E*V&jhNITFdw zeD-r@Y(gH#!^sZEb+DEbN=u>cKnAdxd6Hd!LKwLk?deA9hwVkV5G2v@d701P9mO}A z8Coh+0$Q=sH*~Jp6&B-y;Dod#gPRO2IEOCUc3yqHIC*!)5Q5POwvvR}G)xw%gH9aQZ*H`cGU0H5l@ZIprIZ4%y^AiBG?9L=J%A0kF-aMLZ37L*@%z z(=@4@-&VN9OVPfn{S}U<3YeiQZ8|`0hHs-kw{7PFfXy-+iG|+l?Dpc#30-FEXGHjT zQV~^spJpfr1w)z%LoyQjYT+*KS^K!PJ}dbdEWK73{3Zy3`w7o7@64V#)(7y<;e z9x7LDDU0Zs6kgd03oCUO`S6YetI}T_S`L3$@dcD!RB-22=CS+p028dH6$POX)~{gs z>ezN^5^yz?BFj2e8F@IrrL!kKehl;&bvhqt)(q~ZVWh%(e-;EID1U8f;BSmD4U0l8vej9x~W}i z|Be_PFGQeUyk|1p-J`Yzq}gnF&2g_T2>nMIUm}WOq2UfxISo{z9ca2_tQBNYE4dh6 zqm;9@mV!M(FKJlwNygcUxuWngypbO{&3c=)O_ykzGGfShXrHi3w_|2;s!Mk-Q6RK8 zcP0h1jxMI=Py-(f^7hs(L5E){d<@0gP)%rM^HGp znY;~8_9#em$9X-_<4d~Ml)d%81fmo4Yk+{?k{?xVd={t@KAP}xf8^m0)=?d_Z5ViU z<07%}J(D!6m;EBHh!@IlXCo^+TcHz+{e!X#RM( zc3BZOJPm*h@Fy$l`?F^D?Q$skha64lTE`4v%FV)%g>>oDvklc2gF{van&S@{F%Keu zLcO266~@L(!NHv8=lk}~Yty{+H4)fRd_z_>!88tgD*R=+1l$Ocb@j`}Sg|xsX8)a1 z+DC&9UTt=XdtNbuU6LIXdb!23$v=N*DU{_g~~VpluaBjv?<2( z#eIOesZpY-GxP$=yf(OW<+bl&@c+jN08Wwr*dhC$^Miji0~?3`r52pC`yZak{%fZG zYo`8VfByey%;jG*^?&wE_5TOQ=imQN5u8Al0Q`%h`g=nTmaay`lgB literal 23908 zcmdSAcT`hfw>BCqSP&2uP&xwA1e7Y>21u`=7ZqutN+%G44Jp!_^cqU&(rZ8jq)Q;7 z2LTC?K#&qb=LY?~=e+Ov&i%%?f8I3)kiGWKT64`c*PPFM_9RqCONII}(`5hvK&|@h zsU84u&J6&dIJ`(n?rD%S#*qI|c<8A-29yo5tdK9x**(&H1OQYlx0iypjSDaHQ#RkIU@7%&zsSvz6dk0hb31|K zT=d@2eX(SDN8w~u+t`*k65h`{vvDUQJ=sL8V|A#6XmLq6sgH*&7rBiao~@$z`*G)S z(Ahtqo_m~o@V84+<-fWvwTIng7rrZ+`uEONyL8!ViPStdiorUwI?>d>V_fCUObDP8 zZF_N<{?B7U19U(CK0nSvLGwSm%+1fH1>wFIj={IUg@ev?P}E8$Zkl1oDE+u}&{(M$1Hd<;mSgNfwyiVeYq|kbMt^dxbBVp_b(2~A6aW%44iLY4_R|_YJ004#Z zJNp?x;`(*3#n(@Tg()Is{otX8mj)NYa0%^>J*vxQ@4q_cx`dZODF6@GD%VLR%dOg@ z3Egz1_2(XJ45a<^9Bx*~k!Gk7NjVO~8b7cSKVluIthlg$1pu(C*g{MUPuJN;mO5-S zyS~0eHiFZ3RrY^T*MD^-{d8|Q6UI$e9rBN&9EUooWXgjlNzW( zCX2pm1Hno@UTUJGKO^Q*3G_^ra#^LW4WNpwd}<^&BepW3@Tkk$2U2Q{)lcAHD--`0 zA(`Pey)%ihq&f&3Nu`(jjl0Hv#Bvryz(BBDxia248g|0ZB1}EU23A%YVJZVw;xYeki+RXu$RFOsL`GiMN?&;%w+oEDqtm7mcO(sLcQa5%|# z>1lrpqY{umjFD_T3|8Q8$@<3Tkm9$_QB&AH@$lS(Ac^J;$*c3@n7uDmdV2a2qCS8G zX`>R_y4F%>={=calu0^*ujsXYO}(g+5iMIzs{YhHAw~dzqi_aHFcQJzw@p$4)9ISi zFhvDRcEuAG2=vj>v?hC5poU0>)`&Ij6}_CHepO94_qcbYU4r8bqM`*N0 z8dFEwKmBn&VKu;{PZGPbn(#z?&8}m#EVxxRn92>bEDWgWW5yH?U4;~U7=8KUss-w& ze#`b~Cebq4Puyv)*r(dF{dPH^{IS+$u2i|^4amXmNwN0H~JD!W+mH_71#cP#Hx0nsd zpVX?A)mx6(&9J`krV*kqd$iy; zGXR;I))gC!$A8MBVjN&az9}gnvQs54D`t!rPIDaK8Au1dXu~SjH-oqi#-!yHsqlnx zyLel98I>vmLf>cl-ox1jaFB~CLSNsmfB5iLt|u_=rHx|K(_;6>SE$Q0&lii|K^-Nt z_bmCKHYU#i0A3TS&IjvB3B?2^#T5px%ZW4QcMW$kv5tf589?ut27S=z9D^qFltr(< zN#F5nXQ=V_x$uk1&8{hHOF(e-wc1L*e`ZfxG>9=2of}HoGr6GEJCi^)=nEI+uT^FrA+}ic1 z1r3#p9DzlhT@*rJk+n>tZ_X}}<3B=kV%eVFUIA-DUL~?gbTF4=i&E}6CI*UafGt3T zcg{TCY&lJYR{iTpebm=!6K4X|=7nFEG+U;SG1xaKeX>w`(87fCSem8>#nw$eD=oC| zoSMR&@4pv+m?=waQnAAw7jyABp*U1$Z=G;aYaTy#ZLS9LV2}BTe!g+D_{HSm)a{4# z`=sU6)M_Ix3DD<;3*=?R$QHB8dgBA8@bT!5X}e(=;5%7fJo48dljOZ^ols1jd4czm zx8u~{Bx{Ri5SJ{Low1KyavUybPM;{_Lv}-!#b~;MI>mhlR zx&eye31XScaUFVfj+DU7cdmleEzrimtu22Eao?Heb-y0%YuT-|5wtp!gs1r2JExLMle{B&z?(*6WhU9ombW)pBafS46Qd<`^PA1^wg3#K71A$OiEZW#t65N z=B6fVrOaQ9=Hn8PYBI6qXR&2W22B)$AF5=CKoi(h@>c9%<|TXD+VrB$oZC;T?N^>T zbW~rYl1cHRy-TF29n@V9%HGO&TVV@{FZFngRvTBSLx7{qOIl*T5-~I9v!7zu;xy%z;}-u96uYV185DlUw2lDZR0C3B<~D{ z$Zdt$gs9Prt6b~OUvH%CG}pc*`q^ANm?<8kxMgA^lZ4uf`#lI~pID)8bhJLNwp!!k*+%5FwU=Qx?co!VmTFy*BO<#D`re`VA==22 z(?YHYY0466SxhnbhFTl1$RJ$g>A#ni_iln>t-W@(w7BcR?u#vAzdgUB=}*Szil-jZ zD}}}c#8!`I^>vYQdKI0$MG)EQoyr>%viel#I>8;mR>XW)1w3fr+|8ABjcY2_T`TodHGE~knwaIO^1oI0!%&`T9W zddRn97?b`6OJK?LjCw*wopHxI^H+OM_n98#C#Wy_^y6tsdT8;Jv7Vgq&=QlD{gm;c%t}R6w5e#4`WaBo zS{0Y2#oB+=o`y;`J_MO7)iC|^WR|x;B+FMJ*CNYe8}rXsUzlQJHEWqOAvB&RJJbrR zFY?WdPqj^i>znKRL5ufQpNNC1t4Xe|yTZq{E_#OLF>31x1ugVvnK9@tY9OCZvsV!V zHeysP(24+K#yTTcE$8yzu#WV?Qb(8OG&4B9mmYmPL5by-b}Mb(l;6zT?kxEP6!NnW z?{M|1}<{YZn10T&ei;%fyK=b7`YAaQ*xmTWKYo;jD@*;Z=eCf`2J7@09k&g-kVu9TD1)*D? zhE|8wk1WlkG$79))vC--AjhY8)V#`;F7oCHTxZWFHg<}Sr^5T;Rn3H(!>>1VizyJLj)z&igvrgeZvgOt!rrw5b-xrW%%)hT&tuJEJogd=-VI&i@ zVC94ROzh}k$nm50#aVxv&f5+vQaI*vq=A6E;YW)t4Z;;!DK`Funi&~aOd&jYfFx(v z8sn#{XeZxjV0}*GSO0H5&mTr(o?{52L!mzVnt=;FrhLuiC={#Bp6`8sk8xP)txGUW zdAR*3R#HPuLBB=9_4e~XwDPX>OyK;9p++4(o#~bMty9=8=RCbzH0l>Z*l*`M5t0Xn z9#qu~yT8~|^{#bK&BM`bjk90Ttqae@!8GXtXG39S{J4CPcqreY0o+<8oJVy{#&E~^ zsD$Phl+#O1SIWbPI;>|5)mV^zM_3XO@S`R%xFuCd7xm`5J+R{GA z$$Ixe{@6*P(T5`HwNZ&_nVmV$6(04<-#=~#e%jI9>}dk8v$OM!P3y8=Q2bF#JB#8? zfYmb0K{b7>z7bd0{C?RmJoE}bl&FA|HPLkAU*N9qMYY16d27~^l}xwu58jR9H3qG= z@w26)G}`SI#e|IO#vB8UM+blp7BUJTOpG7lH_CD-+2&POg+t0rpBc0`OkbQ8PKw5( z=BHg+nmbQwu4B%plW5Rki-=%WUi&V4poVL)?@**A)2?6Rfpsog^L@@<+D_!1E%eys zLK|`(^xW$aqp%wP*^eu-Mzp_Y%kX9BSYhKpaapJ?vaZpw!fzGTv7N3JE8O+mGobof zITDx-JG;JaP}ETV)nt)fmY?5brZHILc}bis5%Z$R35nd8TC*un}M_ z+6s9Ehsv_XZ<8zJ^i6iyk-b8xcOPjo5?2xmN~C6gV6KiN3oNi*V|Pl4m%VX$FWkRd z73jMgaunFZnuc^4UF8 zaQNLH8c|!XZdf;{DzJA@WxCyX@c0m)hOoyp$`$o-SXhL2(DTglg+vb}`;4lOa^VFS zSC5vD&CoHo2t(;DQ2!@WM#2(d%jnmoA056@mm2IxoeX=h2b-NiF1$>}n6*6hU~vA_ zrx$H2U-M&q0uJw8s8zF|gUd#E5hbk_FgM31fz^HID`N(~p{knG?gurkV44*7 zSzn`WrUKA%)Hk%yetAcJ2~!+xgxYjz&nKL?K0 zxw=0sCHZ(H@UA!yFf|zazZ-3fHW6=np3tR1Whv4jh#U*@e;O@e?`u|-@BC%@s}!gM zib}RN-HZ0WbdZ83pfl~Umd-~$Q)7cFqQ(T;RbC$kUf>L#Ql)Ku%PQxR^ zm`NFxj?Dfo6!R^~*($v#s3N|vL{(vXbB4M1dAGF4$#z;s@u(ErZT z5cu_&Nlnv=GO=v&94zsqdB(4mBQ-u08v#_=#}^Ss4prnmn>$-@@rUo2NaqbR zb_^SYl}|&rg)o{#n&}$}W)GVsJ0Ngk%+8EUFoS<$SUIR*&#+ur5B6(a%!3Tg zh&wohtk~ry;fMrvNOz?9UHNAI-Aek~{?zqGO1)LnNt#SHqiwG<9piYfZnBZ0t9|2a z$B-J?-gU=M#ax|W%CXlDZq7yIX&=j3om9H1KAl>ZWUHMP6{YY}lI#0mX5>nR9wIEJ zJkd7VTB0)WFW8~2zbFM0naNX7FNLa8kW@E=L;Qejb4yN|Uc}wxlt2&W^ob_j@IWc6 z@Qj0SOAJBSxgt%1Bq6@ z4vP(337BIxZ6xRyjj^We&%E;RiBNZIFc+@caC;HcIwPaSbp!sh0~NKRG?UFs(3J3@ zaPbpy9K@Z)?YzreJ}wqaM%)Yyw*jwrDz3nu%y^!Z6GF_8jSv^8d=@O>y##UWFH?2? zoXb+Lr$B)Gm&??toiDv)?B=|9R?I6EruS=W7k}Y*jqGN)Dw(8!;ez^}#Gjmv(lrrG zohuM(0N|%n6LGrS5Q+x@`~M)XDouaqxRc4->_OJal!0p$G`PsB z{okDh#CgocavaxiR#6#~tb7^bhevkAXF+4weJ;l0J|ssjnbrmbsimWMMHEVb*=42I znj8<``QSlAAqirC*uKZ57pD!3X5=ld>n-?b(#Igv!GvU|#SE81hN8OVvTCS)-LL15 z2FV=g@iS(tz$cmUmO3w^#0Q#vqD@D2d~+MG{tVchw>BkHgx_{eQ-&x$)@O-z)8OM` zv#zt`j+(E5y$zeN?U>QZCqeIwrxeD-5?n0Kd65}*Kv0%&A-8K?WPo$6lu<$83~I7o zL*`_!V88I*Z<$pjO%aZDI3$V5tx}_5>dW?KEty7r1d9Kh$KX7PH^Xq?{udhbimlJn zo(&2b9V5D*9EPX)%LU12I3?dx;{3hm##^4}kxTCjW2dypyNxk}>*nMF^HiH&9s! z8QwM$@BX@%v$Ad<`9c1N9Xa!Omwqx3iEUN#aMBE4f`qFF#XaA%YO{K5P=3WyUF-4e z?HiWNUS^(0Q~&@d3WBgxB0+M>1ko|kIa0-q= z003D#<9L5V6ygtA-td6(!A^gNj{pA$;=b%3{vQC30-RDr06-h|nz^u18+U2P2PNC< zf7d@>;_248d5}P97ob&$uxvi@JiSLWFjM3y{!tlRf~(DgVID$#(4a1%8EDSuS#e;!E0whMdUjI2m7D=p7sCT+n}>)0tco^ zR*6sD&W`Ime*9J#aaXmVw^h=o^U7be&E~${0+qzi~mI+2^L0jz2gwTN+?mORw-y$z)lIduPaoFnVDwFj<8sYN<8A17OnGQlUm`O}l~f|KA| zL5^NqKIMi>>I1pC28a29O}?pGyAnG;-hUwBm=Lw5dg%bWF_0$oHDUtf7a(ma>7O3v znpQR&xULooD6lLh9EeY^;X7}@yCQl~^*u_E4KLDX*MVz&sQNkSEp0=>H(mJ}jwx5O zTFF_t)7OUp_|i6~&C!_Lk^6)sYio5B;ijT4;``^qOS9{_eN^7dE8R;D8;&16yP7TD zhgq5Btb}`b4m?4Oj8L^qc}Cbfu&ul@vVT9jaFCu+tN!2vm}`(iE2pgWNM^=6SN6jd zp2e;=`;WjX7Pf?t7&FS25_}m3hE9*QZnf|s3eSiy)03s@`{+13s*f3#Iu%FsIi^ z2oe*QS((AU2u{6iSX-a*xa{RN^;MDAG;Xn|T8l4wWorc+9q$mI^@C3oVHW-{8Bb8r z&v)`=}X+r%7QkLjA!0>pN@I;%^xnmjmQ9 zv*pH;K;me=^KZO7pz=CSh=ogOe+nBwpYD(+c!4tb0e{CyCX&)J|Bjs&u491RA#)Zp z&VR7)Ud5l^+o~m*3SY#%mU8Uknnej=Y2F>wSBE*{>TfKB7#w~70`1~**dKnja23G0 z=DVs)&E({Q7^6{L!dT>0Gk4q1H4*sZGh2K!DXCkvi=$HP$eyT>$Iql!V71`V2}U~< ztDwIXm?Be_snvX(zhf@$6Fi)sS?0jMHgT9AHUOb;uXftWO|h&jMIUt0b(RZNu0jn) z>_l`E7r&9OhPO`w^gBCUadp`{Mw?O?DCgnvas&IAtJT5u^ozo;3nxR*GK@wU$!g_h z{XU`&rMmL^@M|ifrMQmvv(%^ba;lIigUgZTU zg7aEZ*n7566Fs5p&$zQ(aK--Y2MG*@PCkW6dHTHJp15ggVD=dX@_COKuW~GBqHZ>X zaJAs@UZs>g1k^!0ju`9-L-Jk$_FbRa-d$CxaY|~K&E3^JLhCP&nLV+6oOxur$oTTt zaza|*J`6V4|6aigwDnSK`TOt}AaeA>sqI3PLTAb6S^n5(4+T&D(G6}Asqx#$1w(^s zw1xsp;i1voZ@aAyC$GsLlLRH&O;rkOUbBrl#LB7%^2Yap{dSJ6tgDpNdUc6<4v{de!NGL!`gcExl~IhmyPZx>3cfj#z2b&4 zW}DWq@=Oj|d2HIV%B5s{9}de)bO^7p?p8j+HFjai=nCNU(}Pt3{D@V?=bq2|;YaCH z7C+`X5+b$P&TP@-HKjorsHcB+Brq4ZPL`L1#RwjWql{}- zQmV5-MMFR*O=GQRV;c7ieI{#6i+3!u>AD2;$EKI8J{BxSj7WF|kr3pg6T*fJWofZ; zc)LIYJyh;)j<#mIp~oF{V&9Xbml>FN;15HtThj~fj%oyPom?$YI^dR&K1fg~d-Gcv zNNt?s1{dIRJ7bs))`!kGu-%wO%?RtqRqF_zUXg&ULYXH_V0H+0;gRjDtqjJR1oAwn4DUmt`X=|jP8%`S~|(DG5A_qUX*fd`4m(Ae7u!!^@2 zDpdy8kxP)G+(3%H1dw$e)B5_PNX=@2HQyP@G7yM0@AEfB}gpMthm_ zOZRLmksgWhqSNSn3;}vjLP&tnofS$bj;UGTL^6{mj0oYj@?Pa-vL@ec8y;BJ|=xHKHQ*)cC3zD^0O%r-z4 z?2p8&Y#(Mv?r*Rs;!#Vsd}|spt@pIaSWL$z6qLxf@^*p^6ADcSzN}Ic#J-=SaS!xc zpqJSop$Plp8IQX$!_uv54$cZM8j9-52EsQrxxn^?XAHSqCk)q)m=ug&hvuP;COxXv z-bWz@NVd3@4SCP`b#46<%10=tATFPfEgX&(^y*i{SkITBx&RG`*Z$=y{xY?`L3KOr zWoHDPT)Xn-FMK)FtquYC)oi*=Ww?Cvp|30Mkt5wgH%5~7Vva$18Caip|L7@nzw;T< zY0Baq@4ycWi@fx5*Rf0V_^RC4#@Vc?GD4XviK%Epq#yZwOPp-tz{EU-nerdUN4htv z8|tkNXnBg%?eMf6z!9v!RB?Ih=m9%KxaRc*K}a_Vo;FM?1kg2%`9%PDitb+ML{!UtS3ODei<7T1Nr`ugVI})@PUq-pRb1xpMI?&GzLH0*D z$-u~<%rQYyMiuN6ni$C~1w3iyt+X*HfPwD%t zOo2+;5ys`K1<;%+aGKr@J3Go*(L9gUuKyIo8g$UV^BTIkQi_6(9FJhNpmsFJnnNu_ z*gh>Y%L5z!w0SAwR8WyZrXXH%%t5;^yAcu;(E0Y=sE^;t`Spv}hxnKrFX|uWCmtQC z}>`-u5rs74E z&x(I8er(rJ*(*qKc&*_hoo?#u8sH1T^B*xzEDFJCTSJS%sgO>fnl z6=h{vx)yWAuX6J)C&6e6Ml_apw$KH&wSf1tvt#R8!|nP&@;NUXMPff@ah)>-L_S^7ODG* zts~?D4RhypLaVAQiAF4yVl-=*v~9FR<2--`O>K-vfbSjH9=+%;KZ74x-EE;92-J6= zIw|X>R6mW|E(f{d3s9>cEo-pr%=!FliloBVNipExc6EG8uwLl84P+x7w%_CB>NppL z0WKxi;q!lqw$yIw$`cLy!luYx;haZ(MPb;ipK#%BCcb(V)v^yCPQXncsqv^GSB7d% zzArVp`LWMP!>ceSvj~TiTdJWJo_1Z3M$Rw4&IKuAT&!G`f38lRoWN_ReQut} z%siI9P)1(LLm?Frw7SQ~!lh8D>fdu8w?`(Zh|>fu+?Z1AWFc_g`{>2~4cO5#r#!SG zF7WWz%dh0O!B=^yQP{~Q;?%4n86Y1FH0IC1VugVp-$*$kJEA}vA_O!MQij_8v|g-| zlPC6ZJE@;BhduNxM;UJ5B8w_$y3kx+23zPi!tvxnt|zX4aT1zm6~TCq@+zMt*J)ML zD)+R=)_srpOt4H`%!7x(e=-1pHVPf7(~7R3eU9l578)i`(p;%gB2bqio3k7xxK{0s znO2NO_MfEoX%@_11~@AiJKA8y{*}4y4msgEZO5jT#YG;r_-wOxQRe_UTmN(e{*}nE zaFDaLM{1wXR9s5xgOL-eDrwul&$Lmbh`Z#K4<)7!0G#H@sTl}aA2Y!s_P5mPCm`vL z#0a8Q!1@Nw^C!Yd>L>ef4RV**zvWkYRZk_Hkx!MnwU@V(tIkOWQP-Obrz?0El6wjr z;_j${67AWpiCrq=Sl=fnrIY`bf}$GE3UZ$=Jo~@1OWto3AQN&XcPf^8TuLW*v$VPK zjm=4N(h;=qxA3iy>g)Lj|7ZkI(Gbn$Mp%;^cA^BBnL?h!CQeI00FgI9=V-_&V7D3M zxy^T4>C-;9%cr^QX?t+l0B^zKG(i+B=tYnRH3ozo~ek z!GE1QPuIFoTQPzAyG`B1-R7u%>}BDkYHw#dc|=Z=u=%rlK4%MaP!|m0|73||0ek1Z z=0uN4ergNNcCC}QmfTZ)7Tp!4Sh6UHc_IF{=r80Zm)pzbLD{HfyOAw&hB%n%nkDZa zJAef&4e{EyHy3-(KfUh32%uH|dAeq@)*{+C$>Z6dNwdFeIjzEMx$<1{<9+31o;Znn z#tNS9Nr|?j9L3_G3Kn3TSw42hFo}uI3x=7%+!AXA|XWzZ~PLW&yM{eJ& z?&`k*m+n?Q!;ctf_SjWYhoG@ZYM|`eTN%NNeKolO?@gWk4d12aHPo3jf3JhUYX zrj35MhSXbsttlxu>;Cjx>;?Nt5g4P~QqLqWOvAWffF};M3G8c#yI`L}R3OV?yU=R8 zhA;FK`=%R9Dcoy_Yr=TQ7t?Ba8#GE?O%a97uY+c7hwkf(&&r%1*fbBA^Ktnj9*Bl) zrSUg9Nkw-f@q68TTeXpIK17JI4~GEH>kYN{Zl9C)a98HzdCpVJ(^#NJwC>$*UufOx zx2jaPQPb1wu~m1@;OU*jDw^64=2580G^mRh6Yz(DsR`wgOtzn5`KNYD7R~Vq8=yDw z)0$)c?~1cz;5J|4Ps$eW+bHDt^PLuZo+f!48s~8d#!=Dt>Dj}rjcl&y4gC^b>$`kS zN23SW8apZm`IMKew#J_TX%>_0i_VnG@(~p}NjJ$6;ZC4uG-lEy97LbM8*YH#Xr;x+ zPI^{XpZC*fQU~U9*Ju!3ca{{4de4z=-2J;|GZy_f`!H^Te&Ne0;DVm%?wR;ehA?|b z@h3EhXC?fQ zRVZZrVp`7U$hKR#_ygWOW#p{27$&&l^10C@Q*yBX~y|yh^BiJ=MvJxhWOH;=^8qF6XWUrT7$2sHH3c{x@so%UxVo0 z*X*rmuG169zwMXL0IWUq#iP66x&#O9O1e2n2#jC9+SAM=y8E;U8t`y{gM6f89|-YS zvQ+KM5MXs9{tSG@JvRo*?X7bB<#II+^Do&~)w5>W{S{f^05YryAxjBmQa-9WY{{}pz;hu zpDLFNjJ><03K^?1@F_XhRK7UDWY{eI`?b>ZwNlym@<=t2AvDdp-mk!@p{hLJD+Q;t z068#6oJ;Ck6lJDmWLUwtTpzGCm_J^z^PJTl`aFQzF}KaJ+||z^(|gv$H)H^jT{`i{ z(jv)38{e-Q>Qf&HJ8@y^SkZFnzAQ4_D4{uEdpayYC+glA-mVnh22b^U=^7`m;c5Ds z*m+7YSMh5Ns+(uM=>9})!07oo<)37_(M|5mA7;+$Q9a-zzrmj&0RL9YO%6yueZ4au zFUmAom5E4wCu$})6zfr&&J@4TpXs+91?&$bFH70w%%+6~o(&qOlKK#K8qy}D+Zv4b zjUZbqH>;%GsjqpdcJq#A5w!>8L%9Cq8@m@7f8P6W88E**Z%5Uizicj->$(Zer#fim zO;>awD5d>y9ej$ACKm;1Y%>E!Po)hhpsL){!^tFUJiE$X>Pmy*1!iLapiBSp%+ta*XWKSb&Cf10S22>CN^3xFK_Tpp|>NS^sAlRw&7c&AG)uWHvayM|7sm#XyM!MHFy7M zv9KJr@%POfAS0WHh3^#rPUv(8Ym~iy_Pyx%x#fZv|Cii<49HZ8{9gq36Ll`MvfLT% zu;N?!$F%;=#rS6~i(PkPMz$x_xUbe_R8gF!0XxjGP-EQVapBRrTdjfufsLDba1#Lq63j-ME4(d zQ+nzm+Gpj<6pzOgi68sZAJs7)AF!v0dLfu3J(H!*>x@0{3#pA;_xF^Qj!(S);zhMJzuqE7?>(qjbQm>$B{<~80JmwuD z&4}?oH9&@2F<4b$iKgak8Wy$4J#VFAN)WpFvX{q>Gy3Nphd?vK9)MAh*OT(wi!aBEdwxORl_H%9 zp|=~m=th8)3-c;^^UjiR?wi&=oB#9j0)V`ggY>1sDVq0DaIY&viZ)dW5BOo`QX|u6 zISiR<#LUui6`<{~f4BWYiE|I`yEiXiBa^>s3gI?JrDL+}NviVxj*(VPP0J4+sz13#ok^zQc1ZGx%O3z@X5^&ioXxGOdUV0$apWnYSVS~^^D!Tyo7_-eIltb( zmE1+&4smCfdMvM4%QEt+YV!}q`uyqqq*I1tLcBtD?)pt_UomIzQYHF?N7^WRrcSsvD5mJ71px z{Uqv&FZ|*>1o~ErhYTb~*?)tdDO!3?5}nd_PblXmYSew|Z79p_-JvhM+weiJIik;B zQ0e@nJZ%1+>iJ&KQ3x7*QiXIdr^E27rigZ)+!WG9*NPT-;lp$sPQln@-NZ@#A5@UM zj^Ke+tH$muf&!KLz&6`e)2YCHAGzm!V}sNu>edf0LePbZo`Z~b}| z{^=1e**qU&g1-8#L!{ayXXYR;PZFamD3&l;rEy^R3rFQ;0Jjq#sE=nr_UJ8|4J|N+ zJwt-&6TXYQ+PJ;}*-VaGNZk>4wvRQS6F7g1?$;b!=&v{{^E+gu@hXKu=e*Wo&Cvg$ zswHEOd5@pp4peM``Aq*n1dUljZQK)j||ve)P4}N34;oyU+s*1qb9vc zRd#mWqeOZ`+U@_;%})wl84YcpbwNxdbV8E^Qw#c{7BCoCW5x~+%q|3?JO@+MoVj%r%sHIYaY2rEf+ zaz&mh9`z~=c4y$)%tEr{FQWq<>o=0x%VYy~OwgtKUZ2FFjhodhEqSDg)moEH&dWG5 zGl1^L-`Im}ek!XB7F($OG}88JRx^*->s!N7Q9H1?sJ8APuay$Fpg3u34wm96GEhQM z=jkX)5bju9TREq|Y(K6Hnx1efh5o1OJ5Ql?rL&l3a3e<`qi!iAET@&={JvU1^WD)` z<|uys0Ci9QC@b-YRwZg;hQ6_ATUH$t_t;;IqrPv`e{n-%*g>x};%_%{62KQfn9Uf4K62 z|E^p4LpCV$5HbUmNk`kC$Ryg3%^lnaMV^!afSe(_anT^_s#)3(;GstY87N3jsXg9G zP56;ghz$Gph{~};!^rTVx%M<8R~PYF*+T@vBxjGirhzu6Fg33-sc5xWAo42(j-u(p zgVi&Z)|AhaS;p9|XLfd^M zaoYnlfy-$S1o3oIZz~%vd}g>uiM!4Fm)+61MMfB2O#h_k9Ogk!=&b+3+JCD7_zQXg zfd7AWg;ur}@k%^@=lvyBi;C0yL%iPY+9=>!g$8>L+O07Tf>VA=XeFgfQO1{vfe-GcOKPuaA1ZcR`We03==Ic?KC42VAN`3 zYf>AnfFNV8{}nUIWf|x`)pIe+dTpEASugZ1;icr6!f8z^uVtbM^6RZRsLA^^&(GDC z9}{7Y9iuu3w%ozx^s?cWC+4r%{4C0`JBG6uEX`OR_s=m%p{7%YD>CSSl8P=syQ$C;SG7k$v4R%=eh}jd`mjebn)@e5z#jH}X z_&hCK>68i)9b9lmCEEFD;kLuhl^I)Sxi5OTXY&1>#@@B(lRghwSMc*-9pRR8OQp#5FqnGz zt6P~8Q^a0DJ4Wx$5L%qq?;h2wuv5<{c0gLk?26U}^&wWaQ6-~=b0&>zUhA`F z`DIkD60NJYE8Vw{P?MpRhI_Ya-O6c%)RVwNNXhm1U@k!k5bn_cF=LBpqE?eJNH*-D_IpuvKo?$(XzvX1k5tsyb~?mJ7g{Hc8ZBBGIDMTa zsy(bIXc$3AgX8mVF{P)%2D&;A1Y@2H!Vw z)cf;43+$B$SO9Z;6olizJ2ZN;wx=+bZ>j*{L|yWRGe z4;k4jYZ4C1jd`B(>!tL=4moVCGmLlZPcZt4;VI19zgIC`6(mebs}uraY|-BX`RSGu09o8crdM6dp3Fm^E?Kd0JywfbvJ0(djQ zQ~m_LDDOV>t;>_1p`fakf=BR#@OM||;Q>ro0 zN1QF!x=yshA{<-%i;GDo-M?zi0Csc|3;>UAKog&nN$(yzAXNw&)A(c$SNOvAS?v91 z@^O9J?O{B}Yjn(HXWqkP{Ke!SZh8BI-)CUg8E0Yk?0AUoG^N|y3=0(Jukvnm3>zVP z5v|K~|HV-bt{alMbGI4gTDbS)Lxb`|>r2+n?jBx0?BPEg>Rq-z9o{c^@F1cILF3@# zQW3b4W8nI1p7FEOm|%Gxe&@pq(;6h>^eE_VasCd#Ofi!`YgZ^NPntoF_Sis*+2g%MZXx(wnBE}d3k)T+BUBfh7eCprh3Vl^84A46zMoh zzLj4TEpZMGpVU-pG!i#wYtB7Pj#|!$mT>Lj+e$hcU+r2&NebVV44P>WIaivkIWCeP zn}<=8K=^f;v|TnmAmO5kNvnl5V|hl95vnv3tG4F0vJxvfM%Rg{8U1sok;F?EZs&8T0oQmAQ&DQ9cr*q3HL!wmYfyPSAiMcMTH8|}0jWS;~X0X4={1ajy=h`6A!pRppHv?YIvfB=p z9hLUAZ=zYHA{Be^d|EM~r@fN$H?ML&+M!aO`&l!&{g_W6?;-pUA9y<7oN%-jdC3Yq@K{ zNMUWTzpE@ASWZvm3>-h|&Sw27O1tST@PI)kNYOTKLMY2yaD zDsPW{M=Up}qOR;oXZaCfU)29Fkxda!FE~B-@gRIfKk$PC^e~K655MG{xs6_3{+M7^ zuz9nt-157@7TK9E2)mhVghML=V`>L8a8|sXVs}rvsTQfcf(z8C3P2eG2Po+)Lm=BN z(UK9-T6}wv36p%sRv+T^@O&BLygZtfd#%z^gUzHUQ@DDk&s*N!;(oXO`v%Jf{wE$a z&$cWt>Dnp5>)W=^$EwuawvJhB2;26%vXipeGDgQU1b>a0$HnH=8Sb}OLC$y5KT@P* zJl+yTww6Piho+)Bv@-QxWda{5(nf(gora(n{DoLfCyK`&_sa`?aqDzKkY?UMTAxs~ zt-xb0x8dv`1*rVI0kl3B$vptAd#Fap$BWqtK8dv0U>x|R7UQ_wjH2bt=UVk|WYCF%#v zD3X#A8r`Z}+TXD$aGY9g)0Ng;5!Yo-f*qhzmNyO7m-C~15%);H@1{=G)XiESRwgzW z6@1}GbYpU(GFB^N8Gk%meT6jZQ*LW`-{xoj z2k^1Cl|@Jr_1T+wu2m+x>kx{@1A_%d7h=8c%3QHM=63X4@#3^gWJL~?q zYt6mux__RP?6c38ll|@ezR$N0FCJ+5w%sMIA)sVBEK^B8z+fFQhdZho5@%a~KErbE zei65xD&w*L$ve_AMlXrKT=8MVE)2dLS?=HK-164oDNdUuo$gQ=Y{yQLxv&i9XBw1l z0>-LTFR%H#jy;zG6rOF3tpAh}ADrAt;9FwFQlDx|G?@!-E-_G9}2GH(| zhrW8w$MPc@tu$zu%TI^7SY*apJpg-_r+#DJvLaIT!+MLj*Q9XushS)m95$%9l4{u- z*#l*4pBHG0!B1~qs9ujZ$kepkkuLQE5a}qxRVsNe2}9{bDtk2+c7Qc;1eRIRK#iB? zD0?<%pz!9Z*ga5_p*&E3*a^_%pzVAU=!WSe&?dz=vAI0+DRof?cK=dRQuCwgC0<*h zVR1`rsUU(y8Q(zci*VdXE!K>t`?bGYTtQ-y$VUQCwo(}e(}#z*W|#~fHv1iZk=T^{pJJ1`4SR=#cY@tAnRmQT z-u};i4b)5P1kX_iJmha^`Tx|VlQ#n>QAS1ue|jS!y}#pa)G00d z!1{b9L6@^2@sjx3_*}iTkwlq61r|PU2ih&SVtD!o2=Dr+#t%EH9#|Wn(}-SjL!9`y zfqoi_8lTZU$vE-Dp~GQE3~4!DTI+}_k!wCYPxaMWcQD4_km!UJYp*>Xk?H8B*`G{Qv#12G%uqUkJX-#e`!U?m246q1J2y-28_j4%RB`>P+Xo#l=j57SKu21TiTHi4^^t3jW#5OE_ zKc-#MsrMafcaO>wu^)S~x>aY`gsZc(iz!_bo7(qPovK`$?#mvDwov(?&SdbI0a<^S z0H36xIs`|fY?UA32LxfNZk%J==ePHeewMNP`;qYF$a$rvU`xENXJyU;CsRuLaT92E#Qi-%??m;iZG zdaWwNsknN1^HuK@M!_H}Kee&C8cAKNy`wbIa%Me+KpfO5Xy*LT;zfE2uoEk3#}bu* z?i`q^K**2-7VS-3a&52g;kkoEgD+$3EE5GNbGsmoS_5$=<3rGQepe*LWUyIcRPwZ;z`la3%v)p+nk%B_4v;0n?Dk~; zqbOwZ6+EoTETw#bGn%F|ctyZ|(}h0nio@AZHXp>W4(wN_eOuLNV|%Aye7RAANbKr% z^zv#_bBy48N>lVOt}yO^d+68yXf1@d6lMBGqZXK(z;OP+Gt6fX;(;BB~{mHf5p>r727m+t=(pG%_)Lez4ki?u+F1V4xEUh z?rKRpp2<{hE4BsHrvq1|7QhH(6GZi3!}FMpdkxVk}&fI!1_TW9{nTTb^41r z=Jvl-5&L4auP%fXy2odDzoast>LAdH%)pfA-ks{)AitdLSkvG=MRG)*UelC3P-iM4 zxdzoP{0oGz88+5=bzepY2!^3e@|b3a+=}CGM5KnVaD^bbrnbF&d|KI z=v&UWL^vn)a65f(jRYYHPtUMtlp8p0@q)qHu}TmMs1xc<(1NN6W9grZ+=R0w7tai; zd#2`I5cFA^|Ix8|beHKE)IDG9B~<~1gsD3-m!h@wdwe%cE-kEmQKj(QcSGPxB|bw%wCzQx&B zY}8no8NvJFF4cG?(=R2GJSY+Q94^@CdDYgGQ6CC8vm`XD*}KqKHD2WB`@dWDwEpS? zkH0-ZBN_qLtLLY^Pm0p#>`3`bq2IW{cM25wJzZzgYYRL~PV>le*9on&RAa>vz*>nCWC?mkU7hyl7p{2-^}fNz5Q`rVbsEE z_eS%`7`SLGb}^Ap!PJ~I%C*^M7O|pO&(bc$Ag0TT5x7y`obFE*?7Dj96^vq$v$yGv0b7W?^|#L>^5c|mDGNS|S( zfO1?N)Tb(}+Nz&Ay(goeL7&caojs#h>QUhQHpiU8^Hrl4g5h2#i@kCD7tmYg6m5D# zDXSVKoeb-O>dU?b${y8r%1A}=#1~p`QloHXdL2hjekgO-JZl@5l7M2YKovTCdlz0IMf%m4!=s^4>DtrpU#8__ zC2Y4GgqLLKJ&@mdXL4lcfs*#H!trpsB&Emx*2lIChkH~RHoQiIl5en;-Wx@eO` zeO!*`hm<=+g5F@oXm|5KzS^E%;pxiP5*=sLch5Oxu@>jDP zf|_tB{3H7SnQwf25YT7|#}}s=1JtRlUANmTs{O5SyzLfWzbpWOZv&F#WlA&(;pCzb zYEqV87dPCAcfK#sZnS*&{~;?tu>z+K{ku^1-P-?Mo58vC!Y2NC!>PyBVw z%Gc=;o+$p?UXx$;jeR*r?(E?9R=*nfLr4?U Kkz2;D=l%)xgZX;^ diff --git a/blazor/file-manager/styles.md b/blazor/file-manager/styles.md index f266b29c9e..b1beb05649 100644 --- a/blazor/file-manager/styles.md +++ b/blazor/file-manager/styles.md @@ -93,9 +93,10 @@ To customize the File Manager layout, use the `.e-layout-content` selector and a border: 3px solid #000000; } -/* Customize the background of the breadcrumb (address bar) */ +/* Style for breadcrumb (address bar) */ .e-filemanager .e-layout-content .e-address { - background: #fbefff; + background: #aceebb; + border-bottom: 2px solid; } /* Customize the background for the Large Icons view */ @@ -120,20 +121,19 @@ To customize the File Manager toolbar items, use the `.e-toolbar` selector and a ```css /* Add border to the entire File Manager toolbar */ -.e-filemanager .e-toolbar { - border: 2px solid #0b0bf9; +.e-filemanager .e-toolbar { + border: 2px solid #0d9cf6; } /* Style for individual toolbar buttons */ .e-filemanager .e-toolbar .e-tbar-btn { - background: #0b0bf9; + background: #0d9cf6; border: 1px solid #000000; } /* Style for toolbar icons */ .e-filemanager .e-toolbar .e-tbar-btn .e-icons { - background: #ffffff; - color: #000000; + color: #ffffff; } /* Style for toolbar button text */ @@ -151,16 +151,22 @@ To customize the File Manager selected files/folders, use the below selectors an ```css -/* Highlight for active item in Large Icons view */ -.e-filemanager li.e-list-item.e-large-icon.e-active { - background: #1f47a5a1; +/* Highlight for active and hover item in Large Icons view */ +.e-filemanager li.e-list-item.e-large-icon.e-active, +.e-filemanager li.e-list-item.e-large-icon.e-active:hover { + background: #dee2e6; border: 2px solid #000000; border-radius: 10%; } +/* Color for text */ +.e-filemanager .e-large-icons .e-active { + color: #212529; +} + /* Highlight for active row in Details view */ .e-filemanager .e-grid td.e-active { - background: #1f47a5a1; + background: #dee2e6; } ``` From c7ef93d788b251566453b8bf1c692686fcd8241c Mon Sep 17 00:00:00 2001 From: Nithya Date: Wed, 4 Jun 2025 18:16:41 +0530 Subject: [PATCH 07/27] 957745: Corrections --- blazor/datagrid/batch-editing.md | 2 +- blazor/datagrid/column-validation.md | 4 ++-- blazor/datagrid/command-column-editing.md | 2 +- blazor/datagrid/dialog-editing.md | 2 +- blazor/datagrid/in-line-editing.md | 6 +++--- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/blazor/datagrid/batch-editing.md b/blazor/datagrid/batch-editing.md index 9a3b0935e6..2882b565d7 100644 --- a/blazor/datagrid/batch-editing.md +++ b/blazor/datagrid/batch-editing.md @@ -302,7 +302,7 @@ public class EmployeeDetails {% previewsample "https://blazorplayground.syncfusion.com/embed/hjBytMVNBCJUWjzh?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -## Adding a new row at the bottom of the Grid +## Adding a new row at the bottom of the Blazor DataGrid The Syncfusion Blazor DataGrid allows you to add a new row at the bottom of the Grid, enabling you to insert a new record at the end of the existing data set. This feature is particularly useful when you want to conveniently add new records without scrolling up or manually repositioning the newly added row. To achieve this, use the [NewRowPosition](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_NewRowPosition) property in the `GridEditSettings` configuration and set it to **Bottom**. diff --git a/blazor/datagrid/column-validation.md b/blazor/datagrid/column-validation.md index 9df71ddc60..6fe7f0288f 100644 --- a/blazor/datagrid/column-validation.md +++ b/blazor/datagrid/column-validation.md @@ -15,7 +15,7 @@ Validation is a crucial aspect of data integrity in any application. The Syncfus Column validation allows you to validate edited or newly added row data before saving it. This feature is particularly useful when you need to enforce specific rules or constraints on individual columns to ensure data integrity. By applying validation rules to columns, you can display error messages for invalid fields and prevent the saving of erroneous data. This feature leverages the **Form Validator** library to perform validation. You can define validation rules using the [GridColumn.ValidationRules](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_ValidationRules) property to specify the criteria for validating column values. -> Validation in DataGrid works based on the Microsoft Blazor EditForm behavior. Once a validation message is shown, it will be validated again only during form submission or when you focus out from that particular field. Refer to the [Microsoft Validation](https://learn.microsoft.com/en-us/aspnet/core/blazor/forms/validation?view=aspnetcore-5.0#data-annotations-validator-component-and-custom-validation) documentation for further reference. +> Validation in Grid works based on the Microsoft Blazor EditForm behavior. Once a validation message is shown, it will be validated again only during form submission or when you focus out from that particular field. Refer to the [Microsoft Validation](https://learn.microsoft.com/en-us/aspnet/core/blazor/forms/validation?view=aspnetcore-5.0#data-annotations-validator-component-and-custom-validation) documentation for further reference. The following code example demonstrates how to define a validation rule for a Grid column: @@ -88,7 +88,7 @@ public class OrderDetails ## Data annotation -Data annotation validation attributes are used to validate fields in the DataGrid. The following validation attributes are supported in the DataGrid: +Data annotation validation attributes are used to validate fields in the DataGrid. The following validation attributes are supported in the Grid: | Attribute Name | Functionality | |---------------|--------------| diff --git a/blazor/datagrid/command-column-editing.md b/blazor/datagrid/command-column-editing.md index 57a5be5c8c..aded36867e 100644 --- a/blazor/datagrid/command-column-editing.md +++ b/blazor/datagrid/command-column-editing.md @@ -9,7 +9,7 @@ documentation: ug # Command column editing in Blazor DataGrid -The command column editing feature allows you to add CRUD (Create, Read, Update, Delete) action buttons in a column for performing operations on individual rows. This feature is commonly used when you want to enable inline editing, deletion, or saving of row changes directly within the Grid. +The command column editing feature allows you to add CRUD (Create, Read, Update and Delete) action buttons in a column for performing operations on individual rows. This feature is commonly used when you want to enable inline editing, deletion, or saving of row changes directly within the Grid. To enable command column editing, use the [GridColumn.Commands](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridColumn.html#Syncfusion_Blazor_Grids_GridColumn_Commands) property. By defining this property, you can specify the command buttons to display in the command column, such as Edit, Delete, Save, and Cancel. diff --git a/blazor/datagrid/dialog-editing.md b/blazor/datagrid/dialog-editing.md index ecb77da061..3f603e117e 100644 --- a/blazor/datagrid/dialog-editing.md +++ b/blazor/datagrid/dialog-editing.md @@ -638,7 +638,7 @@ public class OrderDetails {% previewsample "https://blazorplayground.syncfusion.com/embed/LXrIDWZdLWqNBqts?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -## Implement calculated column inside Grid dialog editing +## Implement calculated column inside Blazor DataGrid dialog editing You can automatically update the value of a column based on the edited value of another column using the Cell Edit Template feature. This feature is useful when you want to dynamically calculate and update a column's value in real time based on changes made to another related column. diff --git a/blazor/datagrid/in-line-editing.md b/blazor/datagrid/in-line-editing.md index 8aea5aff38..48ef78e50f 100644 --- a/blazor/datagrid/in-line-editing.md +++ b/blazor/datagrid/in-line-editing.md @@ -766,7 +766,7 @@ public class OrderDetails {% previewsample "https://blazorplayground.syncfusion.com/embed/hDLStsZBUpReRDUm?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -## Adding a new row at the bottom of the Grid +## Adding a new row at the bottom of the Blazor DataGrid The Syncfusion Blazor DataGrid allows you to add a new row at the bottom, enabling you to insert a new record at the end of the existing data set. This feature is especially useful when you want to conveniently add new records without scrolling up or manually repositioning the newly added row. @@ -866,9 +866,9 @@ public class OrderDetails > The `NewRowPosition` property is supported for **Normal** and **Batch** editing modes. -## Show add new row always in Grid +## Show add new row always in Blazor DataGrid -The Syncfusion® Grid simplifies the addition of new records by consistently presenting a blank "add new row" form within the Grid. To enable this feature, set the [ShowAddNewRow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_ShowAddNewRow) property within the [GridEditSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html) configuration to **true**. This allows for continuous addition of new records. You can display the add new row at either the top or bottom of the Grid content, depending on the [NewRowPosition](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_NewRowPosition) property of `GridEditSettings`. By default, the add new row is displayed at the top of the Grid content. +The Syncfusion Blazor DataGrid simplifies the addition of new records by consistently presenting a blank "add new row" form within the Grid. To enable this feature, set the [ShowAddNewRow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_ShowAddNewRow) property within the [GridEditSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html) configuration to **true**. This allows for continuous addition of new records. You can display the add new row at either the top or bottom of the Grid content, depending on the [NewRowPosition](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_NewRowPosition) property of `GridEditSettings`. By default, the add new row is displayed at the top of the Grid content. The following sample demonstrates how to add a new record continuously using the `ShowAddNewRow` property. From 426ee1d8e7a0059518267670f862cd1b3b502610 Mon Sep 17 00:00:00 2001 From: "Athiswaran-SF3980 (Athiswaran-SF3980)" Date: Thu, 5 Jun 2025 13:32:32 +0530 Subject: [PATCH 08/27] 853075: Updated docs related to showcase and single nuget --- blazor/common/showcase-samples.md | 2 +- blazor/getting-started/blazor-single-nuget.md | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/blazor/common/showcase-samples.md b/blazor/common/showcase-samples.md index 75ca231737..dc62ce42f5 100644 --- a/blazor/common/showcase-samples.md +++ b/blazor/common/showcase-samples.md @@ -23,7 +23,7 @@ Syncfusion® has a collection of sample appl | Organizational Chart | An organizational chart is a diagram that visually conveys a company's internal structure by detailing the roles, responsibilities, and relationships between individuals within an entity. | [Server](https://blazor.syncfusion.com/showcase/organization-chart/)/[WASM](https://blazor.syncfusion.com/showcase/wasm/organization-chart/) | [GitHub code](https://github.com/syncfusion/blazor-showcase-organizational-chart) | | Document Explorer | Manages the file system that allows users to access, edit, and sort files or folders and open Word, PowerPoint, and PDF documents. | [Server](https://blazor.syncfusion.com/showcase/documentexplorer/) | [GitHub code](https://github.com/syncfusion/blazor-showcase-document-explorer) | | Sprint Management | Sprint management involves managing the sprint board of an organization. It allows teams to track tasks, allocate work, and monitor progress during a sprint. | [Server](https://blazor.syncfusion.com/showcase/sprint-management/) | [GitHub code](https://github.com/syncfusion/blazor-showcase-sprint-management) | -| Hotel Booking | Hotel Booking App empowers hotel owners by streamlining room bookings, management, and offering real-time insights into occupancy, including current bookings and available rooms per floor. | [Server](https://blazor.syncfusion.com/showcase/hotel-booking) | [GitHub code](https://github.com/syncfusion/blazor-showcase-hotel-booking) | +| Stay Reservation |Stay Reservation simplifies room bookings, streamlines management for hotel owners, and provides real-time insights into occupancy, including active reservations and available rooms by floor. | [Server](https://blazor.syncfusion.com/showcase/stay-reservation) | [GitHub code](https://github.com/syncfusion/blazor-showcase-stay-reservation)| | Stock Market Dashboard | StockMarket Dashboard Showcase app is a comprehensive tool that provides real-time data, analytics, and insights for investors, displaying key financial metrics and market trends in an intuitive interface. | [Server](https://blazor.syncfusion.com/showcase/stockmarket-dashboard/) | [GitHub code](https://github.com/syncfusion/blazor-showcase-stockmarket-dashboard) | | Fitness Tracker | Track and visualize data of your daily activities, diet and fasting to track fitness of daily statistics. | [Server](https://blazor.syncfusion.com/showcase/fitness-tracker/) | [GitHub code](https://github.com/syncfusion/blazor-showcase-fitness-tracker) | | Loan Calculator | Calculate loan payments, interest rates, and amortization schedules. When you are planning for a personal loan or analyzing business financing options, this provides accurate results and helps you make informed financial decisions. | [WASM](https://blazor.syncfusion.com/showcase/wasm/loan-calculator/) | [GitHub code](https://github.com/syncfusion/blazor-showcase-loan-calculator) | diff --git a/blazor/getting-started/blazor-single-nuget.md b/blazor/getting-started/blazor-single-nuget.md index 7498b5ec46..08c07de6bb 100644 --- a/blazor/getting-started/blazor-single-nuget.md +++ b/blazor/getting-started/blazor-single-nuget.md @@ -9,7 +9,7 @@ documentation: ug # Getting started with Blazor Component using Syncfusion.Blazor NuGet -This section briefly explains how to include a Blazor component with the Syncfusion.Blazor Single NuGet package in your Blazor Server App and Blazor WebAssembly App using Visual Studio. +This section briefly explains how to include a Blazor component with the Syncfusion.Blazor Single NuGet package in your Blazor Server App and Blazor WebAssembly Standalone App using Visual Studio. ## Prerequisites @@ -17,7 +17,7 @@ This section briefly explains how to include a Blazor component with the Syncfus ## Create a new Blazor App in Visual Studio -You can create a **Blazor Server App** or **Blazor WebAssembly App** using Visual Studio via [Microsoft Templates](https://learn.microsoft.com/en-us/aspnet/core/blazor/tooling?view=aspnetcore-7.0) or the [Syncfusion® Blazor Extension](https://blazor.syncfusion.com/documentation/visual-studio-integration/template-studio). +You can create a **Blazor Web App (Server Interactive Mode) or WebAssembly Standalone**using Visual Studio via [Microsoft Templates](https://learn.microsoft.com/en-us/aspnet/core/blazor/tooling?view=aspnetcore-8.0&pivots=vs) or the [Syncfusion® Blazor Extension](https://blazor.syncfusion.com/documentation/visual-studio-integration/template-studio). ## Install Syncfusion® Blazor Single NuGet in the App @@ -35,7 +35,7 @@ N> Syncfusion® Blazor components are availa ## Register Syncfusion® Blazor Service -Open **~/_Imports.razor** file and import the `Syncfusion.Blazor` and `Syncfusion.Blazor.Calendars` namespace. +Open **~/Components/_Imports.razor** file and import the `Syncfusion.Blazor` and `Syncfusion.Blazor.Calendars` namespace. ```cshtml @@ -44,7 +44,7 @@ Open **~/_Imports.razor** file and import the `Syncfusion.Blazor` and `Syncfusio ``` -Now, register the Syncfusion® Blazor Service in the **~/Program.cs** file of your Blazor Server App or Blazor WebAssembly App. +Now, register the Syncfusion® Blazor Service in the **~/Program.cs** file of your Blazor WebApp Server Interactive Mode or WebAssembly Standalone app. {% tabs %} {% highlight C# tabtitle="Blazor Server App" hl_lines="3 10" %} @@ -87,11 +87,10 @@ await builder.Build().RunAsync(); The theme stylesheet and script can be accessed from NuGet through [Static Web Assets](https://blazor.syncfusion.com/documentation/appearance/themes#static-web-assets). Reference the stylesheet and script in the `` of the main page as follows: -* For **.NET 6** Blazor Server app, include it in **~/Pages/_Layout.cshtml** file. -* For **.NET 7** Blazor Server app, include it in the **~/Pages/_Host.cshtml** file. +* For **.NET 8 and .NET 9 WebAssembly Standalone app** , include it in **wwwroot/index.html** file. -* For Blazor WebAssembly app, include it in the **~/index.html** file. +* For **.NET 8 and .NET 9 Blazor WebApp Server Interactive Mode**, include it in **~/Components/App.razor**. ```html @@ -105,7 +104,7 @@ N> Check out the [Blazor Themes](https://blazor.syncfusion.com/documentation/app ## Add Syncfusion® Blazor component -* Now, add the Syncfusion® Blazor Calendar component in the **~/Pages/Index.razor** file. +* Now, add the Syncfusion® Blazor Calendar component in the **~/Components/Pages/Index.razor** file. {% tabs %} {% highlight razor %} From da45af530cf69e11b45c971072605a8eccc58e0a Mon Sep 17 00:00:00 2001 From: NithyaSivaprakasam <103498896+NithyaSivaprakasam@users.noreply.github.com> Date: Tue, 10 Jun 2025 10:10:39 +0530 Subject: [PATCH 09/27] Update in-line-editing.md --- blazor/datagrid/in-line-editing.md | 128 ++++++++++++++++++++++++++++- 1 file changed, 125 insertions(+), 3 deletions(-) diff --git a/blazor/datagrid/in-line-editing.md b/blazor/datagrid/in-line-editing.md index 8aea5aff38..b5cef84567 100644 --- a/blazor/datagrid/in-line-editing.md +++ b/blazor/datagrid/in-line-editing.md @@ -866,9 +866,131 @@ public class OrderDetails > The `NewRowPosition` property is supported for **Normal** and **Batch** editing modes. -## Show add new row always in Grid +## Saving a new row at a particular index -The Syncfusion® Grid simplifies the addition of new records by consistently presenting a blank "add new row" form within the Grid. To enable this feature, set the [ShowAddNewRow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_ShowAddNewRow) property within the [GridEditSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html) configuration to **true**. This allows for continuous addition of new records. You can display the add new row at either the top or bottom of the Grid content, depending on the [NewRowPosition](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_NewRowPosition) property of `GridEditSettings`. By default, the add new row is displayed at the top of the Grid content. +By default, when a new row is added to the Syncfusion Blazor DataGrid, it is inserted and saved at the top of the Grid’s data source. However, certain use cases may require saving the newly added row at a different position—for example, at the end of the current page or a custom index based on business logic. + +To achieve this customization, the `args.Index` property can be set during the [OnActionBegin](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html) event of the Grid. This allows the developer to define the exact position where the new row should be saved in the underlying data source. + +The following sample code demonstrates changing the save index of the new row that gets added in the Grid. Using `ActionBegin` event, `args.Index` property can be used to set the custom index for the saved new row. This allows the users to define the exact position where the new row should be saved in the underlying data source. + +{% tabs %} +{% highlight razor tabtitle="Index.razor" %} +@using Syncfusion.Blazor.Grids +@using Action = Syncfusion.Blazor.Grids.Action + + + + + + + + + + + + + +@code{ + SfGrid GridInstance { get; set; } + public List Orders { get; set; } + protected override void OnInitialized() + { + Orders = Enumerable.Range(1, 75).Select(x => new Order() + { + OrderID = 1000 + x, + CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], + Freight = 2.1 * x, + OrderDate = DateTime.Now.AddDays(-x), + ShipCountry = (new string[] { "USA", "UK", "CHINA", "RUSSIA", "INDIA" })[new Random().Next(5)] + }).ToList(); + } + public void OnActionBegin(ActionEventArgs args) + { + if (args.RequestType.Equals(Action.Save) && args.Action == "Add") + { + //Here you can set the custom index for the saved new row. Below calculation save the new row as last row of current page. + args.Index = (GridInstance.PageSettings.CurrentPage * GridInstance.PageSettings.PageSize) - 1; + } + } + public class Order + { + public int? OrderID { get; set; } + public string CustomerID { get; set; } + public DateTime? OrderDate { get; set; } + public double? Freight { get; set; } + public string ShipCountry { get; set; } + } +} +{% endhighlight %} +{% endtabs %} + +{% previewsample "https://blazorplayground.syncfusion.com/embed/hDByNfVYAhjTFmxS?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + +## Saving a new row at a particular index + +By default, when a new row is added to the Syncfusion Blazor DataGrid, it is inserted and saved at the top of the Grid’s data source. However, certain use cases may require saving the newly added row at a different position. For example, at the end of the current page or a custom index based on business logic. + +To achieve this customization, the `args.Index` property can be set during the [OnActionBegin](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html) event of the Grid. This allows the developer to define the exact position where the new row should be saved in the underlying data source. + +The following sample code demonstrates changing the save index of the new row that gets added in the Grid. Using `ActionBegin` event, `args.Index` property can be used to set the custom index for the saved new row. This allows the users to define the exact position where the new row should be saved in the underlying data source. + +{% tabs %} +{% highlight razor tabtitle="Index.razor" %} +@using Syncfusion.Blazor.Grids +@using Action = Syncfusion.Blazor.Grids.Action + + + + + + + + + + + + + +@code{ + SfGrid GridInstance { get; set; } + public List Orders { get; set; } + protected override void OnInitialized() + { + Orders = Enumerable.Range(1, 75).Select(x => new Order() + { + OrderID = 1000 + x, + CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], + Freight = 2.1 * x, + OrderDate = DateTime.Now.AddDays(-x), + ShipCountry = (new string[] { "USA", "UK", "CHINA", "RUSSIA", "INDIA" })[new Random().Next(5)] + }).ToList(); + } + public void OnActionBegin(ActionEventArgs args) + { + if (args.RequestType.Equals(Action.Save) && args.Action == "Add") + { + //Here you can set the custom index for the saved new row. Below calculation save the new row as last row of current page. + args.Index = (GridInstance.PageSettings.CurrentPage * GridInstance.PageSettings.PageSize) - 1; + } + } + public class Order + { + public int? OrderID { get; set; } + public string CustomerID { get; set; } + public DateTime? OrderDate { get; set; } + public double? Freight { get; set; } + public string ShipCountry { get; set; } + } +} +{% endhighlight %} +{% endtabs %} + +{% previewsample "https://blazorplayground.syncfusion.com/embed/hDByNfVYAhjTFmxS?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} + +## Show add new row always in Blazor DataGrid + +The Syncfusion Blazor DataGrid simplifies the addition of new records by consistently presenting a blank "add new row" form within the Grid. To enable this feature, set the [ShowAddNewRow](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_ShowAddNewRow) property within the [GridEditSettings](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html) configuration to **true**. This allows for continuous addition of new records. You can display the add new row at either the top or bottom of the Grid content, depending on the [NewRowPosition](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.GridEditSettings.html#Syncfusion_Blazor_Grids_GridEditSettings_NewRowPosition) property of `GridEditSettings`. By default, the add new row is displayed at the top of the Grid content. The following sample demonstrates how to add a new record continuously using the `ShowAddNewRow` property. @@ -1207,4 +1329,4 @@ public class OrderDetails {% endhighlight %} {% endtabs %} -{% previewsample "https://blazorplayground.syncfusion.com/embed/LthINCtgBmWlAIwy?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} \ No newline at end of file +{% previewsample "https://blazorplayground.syncfusion.com/embed/LthINCtgBmWlAIwy?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} From cdc83d0b9d67e6c6eed877fc899200c2a9351afc Mon Sep 17 00:00:00 2001 From: NithyaSivaprakasam <103498896+NithyaSivaprakasam@users.noreply.github.com> Date: Tue, 10 Jun 2025 10:15:50 +0530 Subject: [PATCH 10/27] Update in-line-editing.md --- blazor/datagrid/in-line-editing.md | 63 +----------------------------- 1 file changed, 1 insertion(+), 62 deletions(-) diff --git a/blazor/datagrid/in-line-editing.md b/blazor/datagrid/in-line-editing.md index b5cef84567..6a9afc446e 100644 --- a/blazor/datagrid/in-line-editing.md +++ b/blazor/datagrid/in-line-editing.md @@ -766,7 +766,7 @@ public class OrderDetails {% previewsample "https://blazorplayground.syncfusion.com/embed/hDLStsZBUpReRDUm?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} -## Adding a new row at the bottom of the Grid +## Adding a new row at the bottom of the Blazor DataGrid The Syncfusion Blazor DataGrid allows you to add a new row at the bottom, enabling you to insert a new record at the end of the existing data set. This feature is especially useful when you want to conveniently add new records without scrolling up or manually repositioning the newly added row. @@ -868,67 +868,6 @@ public class OrderDetails ## Saving a new row at a particular index -By default, when a new row is added to the Syncfusion Blazor DataGrid, it is inserted and saved at the top of the Grid’s data source. However, certain use cases may require saving the newly added row at a different position—for example, at the end of the current page or a custom index based on business logic. - -To achieve this customization, the `args.Index` property can be set during the [OnActionBegin](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html) event of the Grid. This allows the developer to define the exact position where the new row should be saved in the underlying data source. - -The following sample code demonstrates changing the save index of the new row that gets added in the Grid. Using `ActionBegin` event, `args.Index` property can be used to set the custom index for the saved new row. This allows the users to define the exact position where the new row should be saved in the underlying data source. - -{% tabs %} -{% highlight razor tabtitle="Index.razor" %} -@using Syncfusion.Blazor.Grids -@using Action = Syncfusion.Blazor.Grids.Action - - - - - - - - - - - - - -@code{ - SfGrid GridInstance { get; set; } - public List Orders { get; set; } - protected override void OnInitialized() - { - Orders = Enumerable.Range(1, 75).Select(x => new Order() - { - OrderID = 1000 + x, - CustomerID = (new string[] { "ALFKI", "ANANTR", "ANTON", "BLONP", "BOLID" })[new Random().Next(5)], - Freight = 2.1 * x, - OrderDate = DateTime.Now.AddDays(-x), - ShipCountry = (new string[] { "USA", "UK", "CHINA", "RUSSIA", "INDIA" })[new Random().Next(5)] - }).ToList(); - } - public void OnActionBegin(ActionEventArgs args) - { - if (args.RequestType.Equals(Action.Save) && args.Action == "Add") - { - //Here you can set the custom index for the saved new row. Below calculation save the new row as last row of current page. - args.Index = (GridInstance.PageSettings.CurrentPage * GridInstance.PageSettings.PageSize) - 1; - } - } - public class Order - { - public int? OrderID { get; set; } - public string CustomerID { get; set; } - public DateTime? OrderDate { get; set; } - public double? Freight { get; set; } - public string ShipCountry { get; set; } - } -} -{% endhighlight %} -{% endtabs %} - -{% previewsample "https://blazorplayground.syncfusion.com/embed/hDByNfVYAhjTFmxS?appbar=false&editor=false&result=true&errorlist=false&theme=bootstrap5" %} - -## Saving a new row at a particular index - By default, when a new row is added to the Syncfusion Blazor DataGrid, it is inserted and saved at the top of the Grid’s data source. However, certain use cases may require saving the newly added row at a different position. For example, at the end of the current page or a custom index based on business logic. To achieve this customization, the `args.Index` property can be set during the [OnActionBegin](https://help.syncfusion.com/cr/blazor/Syncfusion.Blazor.Grids.SfGrid-1.html) event of the Grid. This allows the developer to define the exact position where the new row should be saved in the underlying data source. From 45fe33daf26b286ea5f924159de92c2691786d19 Mon Sep 17 00:00:00 2001 From: JamunaSundaramSF3699 Date: Thu, 12 Jun 2025 11:12:56 +0530 Subject: [PATCH 11/27] documentation(962721):Resolved issue --- blazor-toc.html | 15 ++++++++------- .../datagrid/{ => data-binding}/data-binding.md | 0 blazor/datagrid/{ => data-binding}/local-data.md | 0 3 files changed, 8 insertions(+), 7 deletions(-) rename blazor/datagrid/{ => data-binding}/data-binding.md (100%) rename blazor/datagrid/{ => data-binding}/local-data.md (100%) diff --git a/blazor-toc.html b/blazor-toc.html index 8fdf9be507..0e9f231620 100644 --- a/blazor-toc.html +++ b/blazor-toc.html @@ -1837,9 +1837,10 @@

    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

  • - Data Binding + Data Binding
  • Connecting to Adaptors @@ -1847,7 +1848,7 @@
  • URL Adaptor
  • ODataV4 Adaptor
  • Web API Adaptor
  • -
  • Custom Adaptor
  • +
  • Custom Adaptor
  • Connecting to Database @@ -2013,7 +2014,7 @@
  • How To -