diff --git a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/_index.md b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/_index.md
index 602821fa088..1aaec49055f 100644
--- a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/_index.md
+++ b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/_index.md
@@ -12,12 +12,15 @@ description: "Describes the configuration and usage of the Data Widgets module,
This module contains the following widgets:
* [Data Grid 2](/appstore/modules/data-grid-2/)
-* [Data Grid 2 Properties](/appstore/modules/data-grid-2-properties/)
+ * [Data Grid 2 Properties](/appstore/modules/data-grid-2-properties/)
+* [Date Filter](/appstore/modules/datagrid-date-filter/)
* [Drop-Down Sort](/appstore/modules/gallery/#dropdown)
-* [Filters](/appstore/modules/data-grid-2/#filters)
+* [Drop-Down Filter](/appstore/modules/datagrid-dropdown-filter/)
* [Gallery](/appstore/modules/gallery/)
-* [Selection helper](/appstore/modules/selection-helper/)
-* [Tree node](/appstore/modules/tree-node/)
+* [Number Filter](/appstore/modules/datagrid-number-filter/)
+* [Selection Helper](/appstore/modules/selection-helper/)
+* [Text Filter](/appstore/modules/datagrid-text-filter/)
+* [Tree Node](/appstore/modules/tree-node/)
## Migration
diff --git a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/data-grid-2-properties.md b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/data-grid-2-properties.md
index 5acd7d86c13..d598a3d04cf 100644
--- a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/data-grid-2-properties.md
+++ b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/data-grid-2-properties.md
@@ -7,7 +7,7 @@ description: "This document describes the properties of the Data Grid 2 and thei
## Introduction
-This guide lists all the properties of the Data Grid 2 widget located inside the [Data Widgets](/appstore/modules/data-widgets/) module. Because data grids also contain columns and rows, properties for those [columns](#columns) and [rows](#rows) are also described below.
+This guide lists all the properties of the Data Grid 2 widget located inside the [Data Widgets](/appstore/modules/data-widgets/) module. The properties are grouped by the tabs and groups in which they appear in Studio Pro. Because each column of a data grid has its own set of properties, these are described separately in the [Column Properties](#column-properties) section.
For more information on using Data Grid 2 features, see [Data Grid 2](/appstore/modules/data-grid-2/).
@@ -15,268 +15,498 @@ For more information on using Data Grid 2 features, see [Data Grid 2](/appstore/
### General Tab
-#### Data Source
+#### General
-Data source specifies the source of the data being presented in the data grid. You can select data from **Database**, **Microflow**, **Nanoflow**, or **Association**.
+##### Data Source
-#### Refresh Time (in seconds)
+This specifies the source of the data being presented in the data grid. You can select data from **Database**, **Microflow**, **Nanoflow**, or **Association**.
-The time (in seconds) the grid waits between refreshing the data. Auto-refreshing is turned off when the value is 0.
+##### Refresh Time (in Seconds)
-#### Selection
+The time (in seconds) the grid waits between refreshing the data. Auto-refreshing is turned off when the value is 0. The default value is 0.
-This property controls row selection capabilities. Selection is turned off by default, but can be enabled by choosing ether **Single** or **Multi**:
+#### Columns {#columns}
-* The **Single** selection is selection type where only one row can be selected at the time
-* The **Multi** type support selecting several rows at the time
+##### Columns
-{{% alert color="info" %}}
-Data grid currently supports in-memory selection. When the **Keep Selection** property is disabled, selection is limited to visible rows and will be cleared when you change a data grid page or reload the browser window. When **Keep Selection** is enabled, selections persist across page navigation, data refreshes, filter operations, and sorting changes.
-{{% /alert %}}
+A list of columns displayed in the data grid. Each item in this list is a set of properties that define and control the appearance and behavior of the column. For more information on each property, see the [Column Properties](#column-properties) section.
-#### Selection Method
+##### Show Column Filters
-This property specifies the method of selection.
+If set to **No**, then all column filters are hidden, and the **Filter** property of the columns is not shown. The default value is **Yes**.
-{{% alert color="info" %}}
-This property is available only when **Selection method** is set to **Single** or **Multi**.
-{{% /alert %}}
+#### Events
+
+##### On Click Trigger
+
+This determines how the click action is triggered. The following options are available:
-The **Checkbox** method adds a checkbox to the beginning of the row, which acts as the primary way to select the row. The **Row click** method makes the whole row clickable; clicking on a row makes it selected.
+* **Single click** (default): triggers the action on a single click on a row
+* **Double click**: triggers the action when the row is double-clicked
-#### Show (Un)check All Toggle
+##### On Click Action
+
+This sets the action to be performed when the row is clicked.
{{% alert color="info" %}}
-This property is available only when **Selection method** is set to **Checkbox** in combination with **Selection** > **Multi**.
+The setting for actions and action triggers is related to the selection method and can sometimes be ambiguous. When **Selection method** is set to **Row click**, set **On click trigger** to **Double click**; otherwise Studio Pro shows a consistency error.
+
+For the combinations of selection method and action triggers that are supported, see the [Selection and Row Click Action](/appstore/modules/data-grid-2/#selection-and-row-click-action) section of *Data Grid 2*.
{{% /alert %}}
-When set to **Yes**, the data grid displays a checkbox in the header that, when selected, selects all visible rows. Clearing it will clear the selected rows.
+##### On Selection Change
+
+This sets the action to be performed when the row is selected or unselected. This property is only shown when **Selection** is set to **Single** or **Multi**.
+
+##### On Before Export
+
+This sets the action to be performed before data is exported from the data grid. The action receives the following variables:
+
+* **Grid Name** (String)
+* **Column Titles** (String)
+* **Chunk Size** (Integer)
+* **File Name** (String)
+* **Sheet Name** (String)
+* **Start Time** (Date and time)
+
+##### On After Export
-#### Loading Type
+Sets the action to be performed after data is exported from the data grid. The action receives the following variables:
-This property controls how loading states are displayed during data operations such as pagination, filtering, and refresh.
+* **Grid Name** (String)
+* **Column Titles** (String)
+* **Chunk Size** (Integer)
+* **File Name** (String)
+* **Sheet Name** (String)
+* **Exported Item Count** (Integer)
+* **Status** (String): `success` when the export completes, or `aborted` when it is canceled
+* **Start Time** (Date and time)
+* **End Time** (Date and time)
-Available options include spinner (rotating overlay) and skeleton (placeholder content). Loading indicators automatically appear during initial data load, pagination navigation, filter operations, sorting, and export operations. The system includes smart timing to prevent flickering on fast operations, and also provides appropriate timeout handling for slow operations.
+##### Filters Placeholder {#filters-placeholder}
+
+This placeholder acts as a container for filter widgets that operate on the entire grid. It provides a designated area for placing filter widgets (text filter, date filter, number filter, drop-down filter) that filter across all grid data rather than being limited to individual columns.
+
+Filter widgets placed here are automatically linked to the grid's data source, and changes immediately affect the grid data. You still need to configure the filter widgets themselves, for example to select which attributes they filter on. Multiple filters work together using **AND** logic.
+
+###### Grid-Wide Filtering {#grid-wide-filtering}
+
+{{% alert color="info" %}}
+Grid-wide filtering, which was configured on the data grid itself, was removed in [Data Widgets](/appstore/modules/data-widgets/) 3.0.0. Use the [filters placeholder](#filters-placeholder) together with the [Text Filter](/appstore/modules/datagrid-text-filter/), [Date Filter](/appstore/modules/datagrid-date-filter/), [Number Filter](/appstore/modules/datagrid-number-filter/), and [Drop-Down Filter](/appstore/modules/datagrid-dropdown-filter/) widgets instead.
+{{% /alert %}}
### Behavior Tab
#### Selection
-This section contains properties related to selection behavior when **Selection** is set to **Single** or **Multi**.
+##### Selection
+
+This controls row selection capabilities. The following options are available:
-#### Keep Selection
+* **None**: selection is turned off
+* **Single**: only one row can be selected at a time
+* **Multi**: several rows can be selected at a time
{{% alert color="info" %}}
-This property is only available when **Selection** is set to **Single** or **Multi**.
+When **Keep selection** is set to **No**, the selection is cleared when the selected items are no longer in the current set of data source items, for example when you change a data grid page. When **Keep selection** is set to **Yes**, selections persist across page navigation, data refreshes, filter operations, and sorting changes.
{{% /alert %}}
-By default, this property is set to **No**, which clears the selection when the items are not in the current set of datasource items.
+##### Selection Method
+
+This specifies the method of selection. This property is only shown when **Selection** is set to **Single** or **Multi**. The following options are available:
+
+* **Checkbox** (default): adds a checkbox to the beginning of the row, which acts as the primary way to select the row
+* **Row click**: makes the whole row clickable; clicking a row selects it
+
+##### Auto Select First Row
+
+When set to **Yes**, the first row is selected automatically. This property is only shown when **Selection** is set to **Single** or **Multi**. The default value is **No**.
+
+##### Toggle on Click
+
+This defines the selection behavior when a row is clicked. When set to **Yes**, clicking a row toggles its selection and keeps the other selected rows. When set to **No**, clicking a row selects that row and clears the rest of the selection. The default value is **No**.
+
+This property is only shown when **Selection** is set to **Single** or **Multi** and **Selection method** is set to **Row click**.
-When set to **Yes**, selected items persist across page navigation, data refreshes, filter operations, and sorting changes. When enabled, selections remain active until manually cleared by the user or through a nanoflow action.
+##### "Select All" Checkbox
+
+When set to **Yes**, the data grid displays a checkbox in the header that selects or clears all rows on the current page. The default value is **Yes**.
+
+This property is only shown when **Selection** is set to **Multi** and **Selection method** is set to **Checkbox**.
+
+##### "Select All" Across Pages
+
+When set to **Yes**, the data grid shows a banner with the option to select all rows across all pages when all rows on the current page are selected. The default value is **No**.
+
+This property is only shown when **Selection** is set to **Multi**.
+
+##### Keep Selection
+
+When set to **No** (default), the selection is cleared when the selected items are not in the current set of data source items.
+
+When set to **Yes**, selected items persist across page navigation, data refreshes, filter operations, and sorting changes. Selections remain active until they are cleared by the user or by a nanoflow.
+
+This property is only shown when **Selection** is set to **Single** or **Multi**.
{{% alert color="warning" %}}
-**Keep Selection** cannot be used with non-persistent entities (NPEs) or view entities, as their IDs change on refresh.
+**Keep selection** cannot be used with non-persistable entities (NPEs) or view entities, as their IDs change on refresh.
{{% /alert %}}
-### Columns Tab {#columns}
+##### Show Selection Count
+
+This sets where the number of selected rows is displayed, together with a button to clear the selection. The following options are available:
+
+* **Top**: displays the count above the grid
+* **Bottom** (default): displays the count below the grid
+* **Off**: hides the count
-#### Columns
+This property is only shown when **Selection** is set to **Multi**.
-A list of columns displayed in the data grid. Each item in this list is a set of properties that define and control the appearance and behavior of the column. To read more about each property, see the [Column properties](#column-properties) section.
+#### Loading State
-#### Show Column Filters
+##### Loading Type
-If set to **No**, then all column filters will be hidden.
+This controls how the loading state is displayed while the grid loads data. The following options are available:
-### Rows Tab {#rows}
+* **Spinner** (default): displays a spinner
+* **Skeleton**: displays placeholder content in the shape of the grid rows
-#### Page Size
+##### Show Refresh Indicator
-The number of rows to display per page. When **Pagination** type is **Virtual scrolling**, then this number defines how many rows added to the end when the grid is scrolled to the bottom.
+When set to **Yes**, the grid shows a refresh indicator while the data is being reloaded. The default value is **No**.
#### Pagination
-#### Position of Pagination
+##### Page Size
-Defines the type of pagination. By default, the data grid groups rows into pages, and employs buttons to navigate between pages.
+This sests the number of rows to display per page. When **Pagination** is set to **Virtual scrolling** or **Load more**, this number defines how many rows are added each time more data is loaded. The default value is 20.
-When the property is set to **Virtual scrolling**, then the navigation buttons are hidden and the data grid scrolling is used as a trigger to show the next chunk of data.
+##### Pagination
-#### Show Paging Buttons
+Defines the type of pagination. The following options are available:
-This property controls the visibility of navigation buttons. If set to **Auto**, navigation buttons are only visible when the number of elements in the data source exceeds the page size.
+* **Paging buttons** (default): groups rows into pages, and displays buttons to navigate between pages
+* **Virtual scrolling**: hides the navigation buttons and loads the next chunk of data when the user scrolls to the bottom of the grid
+* **Load more**: displays a button below the rows that loads the next chunk of data
-#### Show Number of Rows
+##### Custom Pagination
-This property displays the total number of rows in the pagination area, providing users with context about the dataset size.
+When set to **Yes**, the built-in paging buttons are replaced with your own pagination. A second property, also named **Custom pagination**, then appears. It is a widget area where you place the widgets that make up the custom pagination. The default value is **No**.
-When enabled, it shows information such as **1 to 20 of 150**. It works with virtual scrolling, load more pagination, and standard pagination modes. On large datasets, the total count calculation may impact initial load time.
+These properties are only shown when **Pagination** is set to **Paging buttons**.
-#### Empty List Message
+##### Show Paging Buttons
-Sets a custom message to be displayed when there is no data in the data source, or the filter result is empty.
+This controls the visibility of navigation buttons. The following options are available:
-#### Dynamic Row Class
+* **Always** (default): navigation buttons are always visible
+* **Auto**: navigation buttons are only visible when the number of elements in the data source exceeds the page size
-An expression that returns the CSS class for the row. The data source entity is available as `$currentObject` within the scope of the expression.
+This property is only shown when **Pagination** is set to **Paging buttons** and **Custom pagination** is set to **No**.
-### Events Tab
+##### Show Number of Rows
-#### On Click Trigger
+When set to **Yes**, the pagination area shows the number of loaded rows and the total number of rows, such as "20 of 150". The default value is **No**. On large datasets, calculating the total number of rows can slow down the initial load.
-This property determines how the click action is triggered.
+This property is only shown when **Pagination** is set to **Virtual scrolling** or **Load more**.
-The default option is **Single click**, which triggers the action on a single click on a row. If set to **Double click**, the action is triggered when the row is double-clicked.
+##### Position of Pagination
-#### On Click Action
+Defines where the pagination is displayed. The following options are available:
-This property sets the action to be performed when the row is clicked.
+* **Below grid** (default)
+* **Above grid**
+* **Both**
-{{% alert color="info" %}}
-The setting for actions and action triggers is related to the selection method and can sometimes be ambiguous.
+When **Pagination** is set to **Virtual scrolling** or **Load more**, this property is only shown when **Show number of rows** is set to **Yes**. If **Custom pagination** is set to **Yes**, custom pagination cannot be shown in both positions; when this property is set to **Both**, Studio Pro shows a warning and the custom pagination is rendered below the grid.
-See [this table](/appstore/modules/data-grid-2/#selection-and-row-click-action) to see which combinations of selection method and action triggers are supported.{{% /alert %}}
+##### Load More Caption
-#### On Selection Change
+This sets the caption of the button that loads more rows. The default value is **Load More**. This property is only shown when **Pagination** is set to **Load more**.
-This property sets the action to be performed when the row is selected or unselected.
+##### Page Size Attribute
-#### Filters {#filters-placeholder}
+This is an **Integer** attribute used to set the page size dynamically. When this attribute is set, it is used as the page size instead of **Page size**.
-This placeholder acts as a container for filter widgets that operate on the entire grid. This placeholder provides a designated area for placing filter widgets (text filter, date filter, number filter, drop-down filter) that filter across all grid data rather than being limited to individual columns.
+##### Page Attribute
-Filter widgets placed here automatically link to the grid's datasource, and changes immediately affect the grid data. Still, widgets should be configured to work properly. Multiple filters work together using **AND** logic by default.
+This is an **Integer** attribute used to set the current page dynamically. The data grid also writes the current page back to this attribute when the user navigates between pages.
-### Column Capabilities Tab
+##### Total Count
-#### Sorting
+This is an **Integer** attribute in which the data grid stores the current total number of rows.
-This flag controls column sorting for the entire data grid. If set to **No**, then sorting is disabled for any column.
+##### Loaded Rows
-#### Resizing
+This is a read-only **Integer** attribute that reflects the number of rows currently loaded. This property is only shown when **Pagination** is set to **Virtual scrolling** or **Load more**.
-This flag controls column resizing for the entire data grid. If set to **No**, then resizing is disabled for any column.
+#### Appearance
-#### Reordering
+##### Empty List Message
-This flag controls column reordering for the entire data grid. If set to **No**, then reordering is disabled for any column.
+This controls whether a message is displayed when there is no data in the data source, or the filter result is empty. The following options are available:
-#### Hiding
+* **None** (default): no message is displayed
+* **Custom**: displays the content of the **Empty placeholder** area
-This flag controls column hiding for the entire data grid. If set to **No**, then hiding is disabled for any column.
+##### Empty Placeholder
-### Configuration Tab
+This is a widget area where you place the widgets to display when the list is empty. This property is only shown when **Empty list message** is set to **Custom**.
-#### Store Filters in Personalization
+##### Dynamic Row Class
-This property controls whether filter states are saved as part of user personalization settings or not. When enabled, the system preserves filter input values, selected filter types, applied filter combinations, filter visibility states, and custom filter configurations in the user's personalization profile.
+This is an expression that returns the CSS class for the row. The data source entity is available as `$currentObject` within the scope of the expression.
-Filter states can be stored in browser localStorage or database attributes depending on personalization configuration. When enabled, users' filter preferences persist across sessions and page refreshes. When disabled, filters reset to default values on every page load—useful for shared screens, dashboards, or public interfaces.
+#### Advanced
-#### Attribute
+##### Custom Row Key
-This property sets the entity attribute that is used to store custom visual settings for the data grid.
+This is an expression that returns a stable identifier for each row. Use it to maintain the scroll position when using view entities. When it is not set, the object ID is used.
-#### On Change
+### Personalization Tab
-This property sets the action to be performed when the **Attribute** value is changed.
+#### Column Capabilities
-### Grid Wide Filtering
+##### Sorting
-{{% alert color="warning" %}}
-Grid Wide Filtering has been deprecated and removed. Use the [Filters Placeholder](#filters-placeholder) along with dedicated filter widgets ([Text Filter](/appstore/modules/datagrid-text-filter/), [Date Filter](/appstore/modules/datagrid-date-filter/), [Number Filter](/appstore/modules/datagrid-number-filter/), and [Dropdown Filter](/appstore/modules/datagrid-dropdown-filter/)) for filtering functionality.
-{{% /alert %}}
+This controls column sorting for the entire data grid. If set to **No**, then sorting is disabled for all columns and the **Can sort** column property is not shown. The default value is **Yes**.
+
+##### Resizing
+
+This controls column resizing for the entire data grid. If set to **No**, then resizing is disabled for all columns and the **Can resize** column property is not shown. The default value is **Yes**.
+
+##### Reordering
+
+This controls column reordering for the entire data grid. If set to **No**, then reordering is disabled for all columns and the **Can reorder** column property is not shown. The default value is **Yes**.
+
+##### Hiding
+
+This controls column hiding for the entire data grid. If set to **No**, then hiding is disabled for all columns and the **Can hide** column property is not shown. The default value is **Yes**.
+
+#### Configuration
+
+##### Store Configuration In
+
+This sets where the personalized configuration of the data grid is stored. The following options are available:
+
+* **Attribute** (default): stores the configuration in the attribute selected in **Attribute**
+* **Browser local storage**: stores the configuration in the browser's local storage. The configuration is scoped to a browser profile and is not tied to a Mendix user.
+
+##### Attribute
+
+This sets the entity attribute that is used to store the personalized configuration of the data grid. The configuration is automatically stored and loaded. The attribute must be an unlimited String.
-### Aria Labels
+This property is only shown when **Store configuration in** is set to **Attribute**.
-#### Filter Section
+##### Store Filters
-Defines a string value that labels the header area of the data grid. Used by assistive technologies and screen readers.
+This controls whether filter states are saved as part of the personalized configuration. When set to **Yes** (default), filter values are stored together with the rest of the configuration, so they persist across sessions and page refreshes. When set to **No**, filters are not stored and reset to their default values on every page load. This is useful for shared screens, dashboards, or public interfaces.
-#### Export Progress
+##### On Change
-Defines a string value that labels the export dialog of the data grid. Used by assistive technologies and screen readers.
+This sets the action to be performed when the **Attribute** value is changed. This property is only shown when **Store configuration in** is set to **Attribute**.
-#### Cancel Data Export
+### Texts Tab
-Defines a string value that labels the cancel export button of the export dialog. Used by assistive technologies and screen readers.
+#### Aria Labels
-#### Select Row
+##### Filter Section
-Defines a string value that labels the checkbox of the row when the selection is enabled. Used by assistive technologies and screen readers.
+This defines a string value that labels the header area of the data grid, which contains the filtering and sorting section. Used by assistive technologies and screen readers.
-#### Select All Rows
+##### Export Progress
-This property provides an ARIA label for the **Select All** checkbox in the grid header. This ARIA label is announced by screen readers when users navigate to the select all checkbox.
+This defines a string value that labels the export dialog of the data grid. Used by assistive technologies and screen readers. The default value is "Export progress".
-The label integrates with three-state checkbox functionality (unchecked, checked, indeterminate) and supports localization through text templates. Screen readers announce appropriate state changes when the checkbox is toggled, improving accessibility compliance for bulk-selection operations.
+##### Cancel Data Export
+
+This defines a string value that labels the cancel button of the export dialog. Used by assistive technologies and screen readers. The default value is "Cancel data export".
+
+##### Select Row Label
+
+This defines a string value that labels the checkbox of a row when selection is enabled. Used by assistive technologies and screen readers. The default value is "Select row".
+
+##### Select All Label
+
+This defines a string value that labels the **Select all** checkbox in the grid header when selection is enabled. Used by assistive technologies and screen readers. The default value is "Select all rows".
+
+##### Single Selection Column Label
+
+This defines a string value that labels the header of the selection column when single selection is enabled. Used by assistive technologies and screen readers. The default value is "Select single row". This property is only shown when **Selection** is set to **Single**.
+
+##### Selecting All Label
+
+This defines a string value that labels the progress dialog shown while all items are being selected. Used by assistive technologies and screen readers. The default value is "Selecting all items...".
+
+##### Cancel Selection Label
+
+This defines a string value that labels the cancel button in the selection progress dialog. Used by assistive technologies and screen readers. The default value is "Cancel selection".
+
+#### Captions
+
+##### Row Count Singular
+
+This sets the text displayed when one row is selected. It must include `%d` to denote the position of the number. The default value is "%d row selected".
+
+##### Row Count Plural
+
+This sets the text displayed when several rows are selected. It must include `%d` to denote the position of the number. The default value is "%d rows selected".
+
+##### Select All Text
+
+This sets the text of the button that selects all rows in the data source. The default value is "Select all rows in the data source".
+
+##### Select All Template
+
+This sets the text of the button that selects all rows in the data source, used when the total count is available. Use `%d` to denote the position of the number. The default value is "Select all %d rows in the data source".
+
+##### Select Status Template
+
+This sets the text displayed when all rows are selected. Use `%d` to denote the position of the number. The default value is "All %d rows selected.".
+
+##### Clear Selection Label
+
+This controls the label of the button that clears the selection. The default value is **Clear selection**. This property is only shown when **Selection** is set to **Multi**.
## Column Properties {#column-properties}
-You can easily see these properties by opening up the property dialog box of Data Grid 2, then clicking **Columns** > **New**.
+To see these properties, open the properties dialog box of Data Grid 2, then click **Columns** > **New**.
-### General Tab
+### General
#### Show
-Controls the type of the data displayed in the column.
+Controls the type of the data displayed in the column. The following options are available:
-The attribute displays the value of an entity attribute. The dynamic text uses the expression and can have multiple parameters. The custom content allows for custom text and widgets.
+* **Attribute** (default): displays the value of the attribute selected in **Attribute**
+* **Dynamic text**: displays the text from **Dynamic text**, which can have multiple parameters
+* **Custom content**: displays the widgets placed in **Custom content**
#### Attribute
-This property controls the attribute used for the column. This property is required when filtering or sorting is enabled.
+This sets the attribute used for the column. This property is required when **Show** is set to **Attribute**, and when the column can be sorted or filtered.
+
+This property is hidden when **Show** is not set to **Attribute**, **Can sort** is set to **No**, and **Show column filters** is set to **No**.
+
+#### Custom Content
+
+A widget area where you place the widgets to display in each cell of the column. This property is only shown when **Show** is set to **Custom content**.
+
+#### Dynamic Text
+
+This is a text template that sets the text displayed in each cell of the column. This property is only shown when **Show** is set to **Dynamic text**.
+
+#### Export Value
+
+This is a text template that sets the value exported for this column when data is exported to Excel. Columns with custom content are only included in the export when this property is set. This property is only shown when **Show** is set to **Custom content**.
+
+#### Export Type
+
+This sets the cell type used for the column's values when data is exported to Excel. The following options are available:
+
+* **Default** (default)
+* **Number**
+* **Date**
+* **Boolean**
+
+This property is hidden when **Show** is set to **Dynamic text**.
+
+#### Export Number Format
+
+THis is an optional expression that returns the Excel number format for exported numeric values, for example `"#,##0.00"`, `"$0.00"`, or `"0.00%"`. For the available formats, see [Number Formats](https://docs.sheetjs.com/docs/csf/features/nf/) in the SheetJS documentation.
+
+This property is only shown when **Export type** is set to **Number**, and is hidden when **Show** is set to **Dynamic text**.
+
+#### Export Date Format
+
+This is an optional expression that returns the Excel date format for exported date and time values, for example `"yyyy-mm-dd"` or `"dd/mm/yyyy hh mm"`.
+
+This property is only shown when **Export type** is set to **Date**, and is hidden when **Show** is set to **Dynamic text**.
#### Caption
-Text to be displayed in the column header.
+This sets the text to be displayed in the column header. A caption is required when the column can be hidden; otherwise Studio Pro shows a warning.
#### Tooltip
-Text to display when hovering over column header.
+This sets the text to display when hovering over a cell of the column. The text is set as the `title` attribute of the cell content. This property is hidden when **Show** is set to **Custom content**.
+
+#### Filter
+
+This is a widget area where you place a filter widget for the column. The filter is displayed in the column header. This property is hidden when **Show column filters** is set to **No**.
#### Visible
-A Boolean expression that controls the visibility of columns in the data grid. If the expression returns **false**, then the column is hidden and remains hidden unless the expression value is changed to **true**.
+This is a Boolean expression that controls the visibility of the column in the data grid. If the expression returns **false**, then the column is hidden and remains hidden unless the expression value is changed to **true**. The default value is `true`.
### Column Capabilities
#### Can Sort
-If set to **Yes**, then rows can be sorted by the data in this column.
+If set to **Yes**, then rows can be sorted by the data in this column. The default value is **Yes**. This property is hidden when **Sorting** is set to **No**.
#### Can Resize
-If set to **Yes**, then the column can be resized by dragging the edge of the column header.
+If set to **Yes**, then the column can be resized by dragging the edge of the column header. The default value is **Yes**. This property is hidden when **Resizing** is set to **No**.
#### Can Reorder
-If set to **Yes**, then the column position in the grid can be changed by the user.
+If set to **Yes**, then the column position in the grid can be changed by the user. The default value is **Yes**. This property is hidden when **Reordering** is set to **No**.
#### Can Hide
-If set to **Yes**, the column can be hidden in the view settings.
+This controls whether the column can be hidden in the view settings. The following options are available:
+
+* **Yes** (default): the column can be hidden in the view settings
+* **Yes, hidden by default**: the column is hidden on first render and can be shown using the view settings
+* **No**: the column cannot be hidden in the view settings
+
+This property is hidden when **Hiding** is set to **No**.
-If hidden by default, column is hidden on first render and can be shown using view settings.
+#### Allow Row Events
-If set to **No**, column cannot be hidden in view settings.
+If set to **Yes**, then all default events on the row, such as **On click action** or selection, are triggered when the user interacts with the custom content. The default value is **Yes**. This property is only shown when **Show** is set to **Custom content**.
+
+For more information, see the [Allow Row Events](/appstore/modules/data-grid-2/#allow-row-events) section of *Data Grid 2*.
### Appearance
#### Column Width
-This property controls how the column width is calculated.
+This controls how the column width is calculated. The following options are available:
+
+* **Auto-fill** (default): fills the available space
+* **Auto-fit content**: uses just enough space to display the column content
+* **Manual**: uses the value of **Column size**
+
+#### Column Size
-**Auto-fill** fills the available space. **Auto-fit content** uses just enough space to display the column content. **Manual** is used to set the number for the flex-grow CSS property.
+This sets the number used to size the column relative to the other columns, as the flex-grow CSS property. The default value is 1. This property is only shown when **Column width** is set to **Manual**.
+
+#### Min Width
+
+This sets the minimum width of the column. The following options are available:
+
+* **Auto** (default): no specific minimum width is set
+* **Set by content**: the minimum width is the minimum width of the column content
+* **Manual**: uses the value of **Min width value (px)**
+
+#### Min Width Value (px)
+
+This sets the minimum width of the column in pixels. The default value is 100. This property is only shown when **Min width** is set to **Manual**.
#### Alignment
-Sets the text alignment in the column.
+This sets the text alignment in the column. The following options are available:
+
+* **Left** (default)
+* **Center**
+* **Right**
-#### Dynamic Cell CSS
+#### Dynamic Cell Class
-An expression used to compute the CSS class for the row using the data for the current entity and the list of selected items.
+This is an expression that returns the CSS class for each cell of the column. The data source entity is available as `$currentObject` within the scope of the expression.
#### Wrap Text
-If set to **Yes**, then the column tries to wrap long text.
+If set to **Yes**, then the column tries to wrap long text. The default value is **No**.
diff --git a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/data-grid-2.md b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/data-grid-2.md
index ed3062a7521..bccb580608f 100644
--- a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/data-grid-2.md
+++ b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/data-grid-2.md
@@ -13,7 +13,7 @@ This document focusing on explaining module features. For precise details on Dat
The data source determines which objects will be shown in a Data Grid 2 widget. In v2.3.0 and above, selecting the entity of the data source will automatically fill the contents, create columns with filters, and create buttons. You can also select which columns to use for the content generation.
-The widget uses a flexible, modular approach for filtering. You can place dedicated filter widgets (text filter, date filter, number filter, dropdown filter) in the filters placeholder above the grid, or within individual column headers. These specialized filter widgets provide tailored behavior for different data types and use cases. This system is superior to a built-in filtering system in that it allows for a more maintainable and customizable architecture.
+The widget uses a flexible, modular approach for filtering. You can place dedicated filter widgets (text filter, date filter, number filter, drop-down filter) in the filters placeholder above the grid, or within individual column headers. These specialized filter widgets provide tailored behavior for different data types and use cases. This system is superior to a built-in filtering system in that it allows for a more maintainable and customizable architecture.
Here is an example of a data grid using filters:
@@ -96,10 +96,10 @@ If a column contains interactive elements such as buttons, this might lead to un
## Pagination
{{% alert color="info" %}}
-This widget does not support [system texts](/refguide/system-texts/), meaning is not possible to translate its content to another language.
+The paging status text (for example, `1 to 20 of 150`) is built into the widget and cannot be translated.
{{% /alert %}}
-In the new data grid we offer two types of pagination: **Paging Buttons** and **Virtual Scrolling**.
+The data grid offers three types of pagination: **Paging buttons**, **Virtual scrolling**, and **Load more**.
### Paging Buttons
@@ -109,8 +109,8 @@ The **Paging Buttons** option will render the default buttons as the previous da
You can configure pagination based on the following properties:
-* **Position** – The **Position of paging button** options allow you to position paging buttons above or below the data grid.
-* **Visibility** – The **Show paging buttons** options allow you to always show paging, or to automatically show and hide paging based on the amount of available data compared to the display limit per page.
+* **Position** – The **Position of pagination** options (**Below grid**, **Above grid**, or **Both**) set where the pagination appears. For **Virtual scrolling** and **Load more**, this option is available only when **Show number of rows** is set to **Yes**.
+* **Visibility** – The **Show paging buttons** options allow you to always show paging, or to automatically show and hide paging based on the amount of available data compared to the display limit per page. This option is available only when **Pagination** is set to **Paging buttons** and **Custom pagination** is set to **No**.
### Virtual Scrolling
@@ -122,7 +122,7 @@ This option functions similarly to the **Virtual Scrolling** feature, but instea
### Row Count Display
-When enabled, the pagination area displays the total number of rows alongside navigation controls. This provides users with context about the data set size. The counter shows information such as "1 to 20 of 150", and automatically updates when users navigate between pages, apply filters, or refresh data. This feature works with all pagination modes including virtual scrolling and load more.
+When **Show number of rows** is set to **Yes**, the pagination area displays the number of loaded rows and the total number of rows. This provides users with context about the data set size. The counter shows information such as "20 of 150", and automatically updates when users load more rows, apply filters, or refresh data. This option is available only for **Virtual scrolling** and **Load more**.
## Columns
@@ -202,20 +202,21 @@ If you need to display advisory information for cell content, you can specify th
This property is not available if you enable **Custom content** for the column
{{% /alert %}}
-{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/data-grid-2/tooltip-prop.png" alt="Example of wrap text" class="no-border" >}}
+{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/data-grid-2/tooltip-prop.png" alt="Tooltip property" class="no-border" >}}
### Association Filter {#association-filter}
{{% alert color="warning" %}}
-Association filtering configuration has been moved from column properties to the dedicated dropdown filter widget. Configure association filtering directly in the dropdown filter widget properties when using custom mode.
+Association filtering configuration has been moved from column properties to the dedicated drop-down filter widget. Configure association filtering directly in the drop-down filter widget properties by setting **Filter by** to **Association**.
{{% /alert %}}
-The dropdown filter widget supports association filtering when configured in custom mode:
+The drop-down filter widget supports association filtering when **Filter by** is set to **Association**:
-* **Entity (Association)** – Defines the association that will be used for filtering.
+* **Entity** – Defines the association that will be used for filtering.
* **Selectable objects** – Defines data source for filter options, returning list of all possible entities that could be associated.
* **Use lazy load** – Controls when filter options are loaded. When set to **No** (recommended), data is fetched immediately providing better personalization support. When set to **Yes**, data is fetched only when the filter is opened, improving initial load times but limiting personalization capabilities.
-* **Option caption** – Sets the expression used as caption for each option in the dropdown.
+* **Caption source** and **Caption** – Set whether option captions come from an attribute or an expression, and which attribute or expression is displayed for each option in the drop-down.
+* **Search attribute** – Sets the string attribute used for searching when **Caption source** is **Expression** and **Filterable** is **Yes**.
### Visible {#visible-filter}
@@ -253,14 +254,14 @@ Triggers an action (such as a nanoflow, microflow, or Show page action) when the
### On Selection Change Action
-Triggers an action (such as a nanoflow, microflow, or client action) when the end-user changes selection in the data grid. This includes selecting or deselecting individual rows, using the **Select all** toggle, or clearing the selection. The action provides a way to respond to selection state changes and implement custom logic based on the current selection.
+The **On selection change** property triggers an action (such as a nanoflow, microflow, or client action) when the end-user changes selection in the data grid. This includes selecting or deselecting individual rows, using the **"Select all" checkbox**, or clearing the selection. The action provides a way to respond to selection state changes and implement custom logic based on the current selection.
## Filters {#filters}
Data Grid 2 uses a modular filtering system with dedicated filter widgets that can be placed in two locations:
* **Column Headers**: Individual filters can be placed in column headers by enabling **Show column filters**. When this option is selected, a drop zone appears in each column header where you can place the appropriate filter widget.
-* **Filters Placeholder**: Grid-wide filters can be placed in the [filters placeholder](/appstore/modules/data-grid-2-properties/#filters-placeholder). This allows for filtering across multiple attributes and more complex filtering scenarios.
+* **Filters Placeholder**: Filter widgets can be placed in the [filters placeholder](/appstore/modules/data-grid-2-properties/#filters-placeholder) above the grid. This allows for filtering across multiple attributes and more complex filtering scenarios.
{{% alert color="warning" %}}
The type of your selected attribute should match the filter type. For example, a **Text filter** should be used for a string attribute.
@@ -270,10 +271,12 @@ Also the desired attribute must be filterable. For example, not a value which is
### Filter Widget Configuration
-All filter widgets support two configuration modes:
+The text, number, and date filters have a **Filter attributes** property. The drop-down filter has an **Attribute config** property, which is available only when **Filter by** is set to **Attribute**. Both properties have two values:
-* **Auto Mode**: automatically detects filterable attributes from the parent grid (works when placed in grid columns)
-* **Custom Mode**: allows manual specification of target data source and attributes for more flexible filtering scenarios
+* **Auto** – Uses the attribute of the column that the filter is placed in. This option works only when the filter is placed in a column.
+* **Custom** – You select the attributes in **Attributes** (or the attribute in **Attribute** for the drop-down filter). The filter is linked to the data source of the data widget it is placed in. Use this option when the filter is placed outside a column.
+
+When the drop-down filter's **Filter by** is set to **Association**, there is no **Auto** or **Custom** choice.
{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/data-grid-2/settings-show-column-filters.png" alt="Settings for data grid 2" class="no-border" >}}
@@ -294,6 +297,8 @@ Here is an example of dropzones for filters in **Structure mode**:
* Not equal
* Smaller than
* Smaller than or equal
+* Empty
+* Not empty
Here is an example of **Date filter** as **Between**:
@@ -303,7 +308,7 @@ Here is an example of **Date filter** as **Between**:
When **Date filter** is defined with **Between** it is not possible to type the date manually. It also has a clear button to clear the date range.
{{% /alert %}}
-You can select your filter criteria in the **Date Filter** settings:
+You can select the initial filter criterion in the **Default filter** property of the date filter:
{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/data-grid-2/date-filter-settings.png" alt="Date filter settings" class="no-border" >}}
@@ -319,64 +324,63 @@ Here is an example of **Date Filter** with **Adjustable by user** defined as **N
You can also define the default value of the widget which will be predefined as initial value when opening your data grid page.
-When **Default filter** is defined as **Between** these fields will appear to define the start and end dates:
+When **Default filter** is defined as **Between**, the **Default start date** and **Default end date** fields replace **Default value** so you can define the start and end dates:
-{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/data-grid-2/date-filter-between-settings.png" alt="Example of Date filter with “Default value” set as Between" class="no-border" >}}
+{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/data-grid-2/date-filter-between-settings.png" alt="Example of Date filter with “Default filter” set as Between" class="no-border" >}}
#### Configurations
-In this section you can select a **Saved attribute** in order to save the current value of the filter. However, the value is not automatically applied to the widget. To restore the previously saved value of the filter, you must configure the same attribute as the **Default value** of the widget. The attribute available in this section must be this type:
+In this section you can select a **Saved attribute** in order to save the current value of the filter. When **Default filter** is set to **Between**, **Saved attribute** is replaced by **Saved start date attribute** and **Saved end date attribute**. However, the value is not automatically applied to the widget. To restore the previously saved value of the filter, you must use the same attribute in the **Default value** expression (or **Default start date** and **Default end date** for a range). The attribute available in this section must be this type:
* Date & Time
#### Events
-In this section you can select an action to be executed **On change** by the filter value. This means every time the user types or selects a value it will be executed.
+In this section you can select an action to be executed **On change** of the filter value or filter type. This means it is executed every time the user types or selects a value, or changes the filter type.
### Drop-Down Filter {#drop-down-filter}
{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/data-grid-2/dropdown-filter.png" alt="Example of default drop-down filter" class="no-border" >}}
-**Drop-down filter** allows users to match enumeration values, Boolean attributes, or an association attribute. The filter can be configured to work in Auto mode (detecting attributes from grid context) or custom mode (manual data source and attribute specification).
-
-In custom mode, you can manually configure the data source and attributes, while Auto mode automatically inherits configuration from the parent column. The filter supports both attribute-based filtering (enumerations, booleans) and association-based filtering (references to other entities).
+**Drop-down filter** allows users to match enumeration values, Boolean attributes, or an association. Use **Filter by** to choose between **Attribute** and **Association**. When filtering by attribute, **Attribute config** can be set to **Auto** (uses the attribute of the column that the filter is placed in) or **Custom** (you select the attribute).
-For association filtering, you can configure:
+To filter by association, set **Filter by** to **Association** and configure the following properties:
-* **Filter by Association**: sets the filter to operate on entity associations
-* **Entity**: selects the target association for filtering
+* **Entity**: selects the association (reference or reference set) to filter on
* **Selectable objects**: configures the data source that provides available filter options
-* **Use lazy load**: controls when options are loaded (immediate vs on-demand)
-* **Option caption**: defines how each option is displayed to users
+* **Caption source**: sets whether option captions come from an **Attribute** or an **Expression**
+* **Caption**: the string attribute or expression that is displayed for each option
+* **Search attribute**: the string attribute used for searching when **Caption source** is **Expression** and **Filterable** is **Yes**
+* **Use lazy load**: controls when options are loaded (immediately or when the filter is opened)
-The filter also supports enhanced features like multi-select, filterable options (combobox-style), and various selection methods (checkbox or row click).
+The filter also supports **Multiselect**, **Filterable** (search input), **Clearable**, **Show selected items as** (**Text** or **Labels**), and **Selection method** (**Checkbox** or **Row click**). **Show selected items as** is available only when **Filterable** and **Multiselect** are both set to **Yes**, and **Selection method** only when **Show selected items as** is set to **Labels**. **Clearable** is hidden when **Filterable** is set to **Yes**, because a filterable drop-down is always clearable.
{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/data-grid-2/dropdown-filter-settings.png" alt="Example of settings for drop-down filter" class="no-border" >}}
{{% alert color="info" %}}
-When using **Custom** mode, you can configure the target data source and attributes directly in the filter widget properties. **Auto** mode automatically inherits configuration from the parent column when the filter is placed in a column header.
+When **Filter by** is set to **Attribute** and **Attribute config** is set to **Custom**, you select the attribute directly in the filter widget properties. **Auto** works only when the filter is placed in a data grid column.
{{% /alert %}}
{{% alert color="warning" %}}
-When a drop-down filter is used in conjunction with an [Association Filter](#association-filter) data grid configuration, both **Default value** and **Saved attribute** properties will be ignored if **Use lazy load** is set to **Yes** in the column settings. This limitation also applies when using page state, meaning that the filter value used in the drop-down filter will not persist when navigating between pages.
+When **Filter by** is set to **Association** and **Use lazy load** is set to **Yes**, both **Default value** and **Saved attribute** properties are ignored. This limitation also applies when using page state, meaning that the filter value used in the drop-down filter will not persist when navigating between pages.
{{% /alert %}}
-When adding a new option, the following properties are required:
+To define the options yourself, set **Automatic options** to **No** and add items to **Options**. When adding a new option, the following properties are required:
* **Caption** – The text being rendered for each option in the drop-down.
* **Value** – The corresponding value that will be compared, if a value is being compared with an enumeration, it should match exactly the enumeration value. This property allows the usage of expression (you can use conditionals to apply dynamic values).
{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/data-grid-2/dropdown-filter-item.png" alt="Example of settings for new option" class="no-border" >}}
-This widget also allows multiple selections by selecting **Multiselect** in the settings. Multiple selections can look like this:
+This widget also allows multiple selections by setting **Multiselect** to **Yes**. Multiple selections can look like this:
{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/data-grid-2/dropdown-filter-multiselect.png" alt="Example of multi select drop-down filter" class="no-border" >}}
-You can also define the empty option caption, which will be rendered as the first item if **Multiselect** if set as **No**. It allows users to clean the filter if pressed.
+You can also define the **Empty option caption**, which is rendered as the first item when **Multiselect** and **Filterable** are set to **No**. It allows users to clear the filter.
#### Configurations
-In this section you can select a **Saved attribute** in order to save the current value of the filter. However, the value is not automatically applied to the widget. To restore the previously saved value of the filter, you must configure the same attribute as the **Default value** of the widget. The attribute available in this section must be this type:
+In this section you can select a **Saved attribute** in order to save the current value of the filter. However, the value is not automatically applied to the widget. To restore the previously saved value of the filter, you must use the same attribute in the **Default value** expression. The attribute available in this section must be this type:
* String
@@ -392,7 +396,7 @@ In this section you can select an action to be executed **On change** by the fil
{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/data-grid-2/number-filter.png" alt="Example of default number filter" class="no-border" >}}
-The **Number filter** allows users to match decimal, integer, and long attributes based on these predefined criteria:
+The **Number filter** allows users to match autonumber, decimal, integer, and long attributes based on these predefined criteria:
* Greater than
* Greater than or equal
@@ -400,8 +404,10 @@ The **Number filter** allows users to match decimal, integer, and long attribute
* Not equal
* Smaller than
* Smaller than or equal
+* Empty
+* Not empty
-You can select your filter criteria in the **Number Filter** settings:
+You can select the initial filter criterion in the **Default filter** property of the number filter:
{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/data-grid-2/number-filter-settings.png" alt="Number filter settings" class="no-border" >}}
@@ -415,13 +421,13 @@ Here is an example of **Number Filter** with **Adjustable by user** set as **No*
{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/data-grid-2/number-filter-not-adjustable.png" alt="Example of number filter with “Adjustable by user” set as No" class="no-border" >}}
-You can also define the default value of the widget, which will be predefined as initial value when opening your data grid page.
+You can also define the **Default value** of the widget, an expression that returns a Decimal value. It is used as the initial value when your data grid page opens.
-To have better control of when the filter will be applied, we offer a **Apply after (ms)** option under the **On change behavior** group. This option will only trigger the filter after a predefined period of time while typing. By default, Mendix suggests 500ms.
+To control when the filter is applied, use the **Apply after (ms)** option in the **On change behavior** group. This option applies the filter after a predefined period of time while typing. The default value is 500 ms.
#### Configurations
-In this section you can select a **Saved attribute** in order to save the current value of the filter. However, the value is not automatically applied to the widget. To restore the previously saved value of the filter, you must configure the same attribute as the **Default value** of the widget. The attribute available in this section must be one of the following types:
+In this section you can select a **Saved attribute** in order to save the current value of the filter. However, the value is not automatically applied to the widget. To restore the previously saved value of the filter, you must use the same attribute in the **Default value** expression. The attribute available in this section must be one of the following types:
* Autonumber
* Decimal
@@ -447,8 +453,10 @@ In this section you can select an action to be executed **On change** by the fil
* Not equal
* Smaller than
* Smaller than or equal
+* Empty
+* Not empty
-You can select your filter criteria in the **Text filter** settings:
+You can select the initial filter criterion in the **Default filter** property of the text filter:
{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/data-grid-2/text-filter-settings.png" alt="Text filter settings" class="no-border" >}}
@@ -462,13 +470,13 @@ Here is an example of Text Filter with **Adjustable by user** set to **No**:
{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/data-grid-2/text-filter-not-adjustable.png" alt="Example of text filter with “Adjustable by user” set as No" class="no-border" >}}
-You can also define the default value of the widget, which will be predefined as initial value when opening your data grid page.
+You can also define the **Default value** of the widget, an expression that returns a String value. It is used as the initial value when your data grid page opens.
-To have better control of when the filter will be applied, we offer a **Apply after (ms)** option under the **On change behavior** group. This option will only trigger the filter after a predefined period of time while typing. By default, Mendix suggests 500ms.
+To control when the filter is applied, use the **Apply after (ms)** option in the **On change behavior** group. This option applies the filter after a predefined period of time while typing. The default value is 500 ms.
#### Configurations
-In this section you can select a **Saved attribute** in order to save the current value of the filter. However, the value is not automatically applied to the widget. To restore the previously saved value of the filter, you must configure the same attribute as the **Default value** of the widget. The attribute available in this section must be one of the following types:
+In this section you can select a **Saved attribute** in order to save the current value of the filter. However, the value is not automatically applied to the widget. To restore the previously saved value of the filter, you must use the same attribute in the **Default value** expression. The attribute available in this section must be one of the following types:
* Hashed string
* String
@@ -477,31 +485,18 @@ In this section you can select a **Saved attribute** in order to save the curren
In this section you can select an action to be executed **On change** by the filter value. This means every time the user types or selects a value it will be executed.
-### Grid Wide Filtering {#grid-wide-filtering}
-
-In order to enable filtering within the data grid header (outside the columns) you need to enable `Grid wide filters` and select the desired attributes to be filtered in the **Filtering** tab. You can select attributes of the following types:
-
-* Autonumber
-* Boolean
-* Date & time
-* Decimal
-* Enumeration
-* Hashed string
-* Integer
-* Long
-* String
-
-The attributes selected here will be used for the matching filter placed inside the composable region. Only the first keyword in the filter will be considered when filtering multiple attributes in grid wide filtering
-
-When using multiple attributes, the filters will automatically select the matching attributes and then compose the desired filter value in an `OR expression`. Make sure you only have one filter widget for each type, for example `Text Filter` and `Number Filter`.
+### Grid-Wide Filtering {#grid-wide-filtering}
{{% alert color="info" %}}
-If a filter is being used and its type does not match with any selected attribute, then it will throw an error requesting you to select the correct filter widget.
+Starting with [Data Widgets](/appstore/modules/data-widgets/) 3.0.0, filtering is configured in the filter widgets. When you update the module, existing grid-wide filtering configurations are automatically converted to the new setup.
{{% /alert %}}
-{{% alert color="warn" %}}
-There cannot be more than one filter of the same type in the data grid header. For example, if a data grid header already has a `Number Filter`, adding another `Number Filter` will cause incorrect data filtering.
-{{% /alert %}}
+To filter across multiple attributes from the data grid header (outside the columns), place filter widgets in the [filters placeholder](/appstore/modules/data-grid-2-properties/#filters-placeholder). The data grid does not have its own filtering configuration. Instead, configure the filter widgets themselves. Filter widgets placed in the filters placeholder are linked to the data grid automatically. To choose which attributes a filter applies to, set **Filter attributes** (text, number, and date filters) or **Attribute config** (drop-down filter) to **Custom** and select the attributes. For more information, see the documentation for each filter widget:
+
+* [Text Filter](/appstore/modules/datagrid-text-filter/)
+* [Number Filter](/appstore/modules/datagrid-number-filter/)
+* [Date Filter](/appstore/modules/datagrid-date-filter/)
+* [Drop-Down Filter](/appstore/modules/datagrid-dropdown-filter/)
## Export to Excel
@@ -516,12 +511,12 @@ To export data from the data grid, create a new nanoflow that calls **Export_To_
* **Chunk size**: the number of rows fetched from the backend to the browser at a time.
{{% alert color="info" %}}
-The recommended value for **Chunk Size** is 200. However, because each data grid has a unique set of columns and varying amounts of data per row, a different chunk size might result in better performance.
+The recommended value for **Chunk size** is 200. However, because each data grid has a unique set of columns and varying amounts of data per row, a different chunk size might result in better performance.
{{% /alert %}}
## Configuration
-You can define an attribute to store the current configuration of the data grid. In this way, if you re-open your page then the current sorted columns, order, and hidden columns will remain the same as in the previous state. To set this option, you need to select a `String` attribute with `Unlimited` as its size as the attribute in the data grid **Personalization** tab in Studio Pro.
+You can store the current configuration of the data grid. In this way, if you re-open your page then the current sorted columns, column order, column widths, and hidden columns will remain the same as in the previous state. When **Store filters** is set to **Yes**, filter values are stored as well. Use **Store configuration in** on the data grid **Personalization** tab in Studio Pro to choose where the configuration is stored: **Attribute** or **Browser local storage**. Browser local storage is scoped to the browser profile, not to the Mendix user, and hides the **Attribute** and **On change** properties. When you choose **Attribute**, you need to select a `String` attribute with `Unlimited` as its size in **Attribute**.
{{% alert color="warning" %}}
If the desired `String` attribute does not contain `Unlimited` in its size, the Data grid will not be able to save all the configurations as expected.
@@ -531,36 +526,21 @@ Here is an example of an unlimited string attribute:
{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/data-grid-2/unlimited-string-attribute.png" alt="Example of unlimited string attribute" class="no-border" >}}
-In order to select an attribute, you need to surround the new Data grid with a Data view. This will allow you to select an attribute. You can also define an action when the attribute will be updated with the new configurations.
+When **Store configuration in** is set to **Attribute**, you need to surround the data grid with a data view in order to select an attribute. You can also define an action when the attribute will be updated with the new configurations.
Here is an example of a configuration containing an On change action:
{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/data-grid-2/configuration.png" alt="Example of a configuration containing on change action" class="no-border" >}}
-## Performance
-
-The performance of the new data grid can be affected if sorting or filtering are enabled. This is because Data widgets v1.1 - 1.2 retrieve all available values for sorting or filtering while the widget runs. This problem does not occur in versions above 1.3 because those versions use [Filtering APIs](/apidocs-mxsdk/apidocs/pluggable-widgets-client-apis-list-values/#filter-helpers) to retrieve only the necessary data.
-
-## Troubleshooting
-
-If you are using Atlas v2.x and you cannot upgrade to Atlas 3 at the moment, please replace the line 3 `cssFiles` with the following code in the file `theme/settings.json`:
-
-```json
-"cssFiles": [
- "styles/web/css/main.css",
- "theme.compiled.css"
-],
-```
-
## In-Memory Selection {#selection}
{{% alert color="info" %}}
In-memory selection was introduced in Data Widgets v2.7.0.
{{% /alert %}}
-Enabling selection allows users to select a row by clicking the row or a checkbox. Selection is disabled by default, and can be activated by changing the **Selection** setting from **None** to either **Single** or **Multi**.
+Enabling selection allows users to select a row by clicking the row or a checkbox. Selection is disabled by default, and can be activated by changing the **Selection** setting (on the **Behavior** tab, in the **Selection** group) from **None** to either **Single** or **Multi**.
-Since the data grid widget keeps selected items in short-living memory that is cleared every time you change the data grid page, selecting items across multiple pages is not supported. This means that the end-user can only select items that are currently visible.
+By default, the data grid widget keeps selected items in short-living memory that is cleared when the data source changes, for example when you change the data grid page. To keep the selection across pages, set **Keep selection** to **Yes**. To let the end-user select all rows across all pages, set **"Select all" across pages** to **Yes**.
### Selection Mode
@@ -570,11 +550,11 @@ In **Multi** mode, the user can select multiple rows.
### Selection Method
-When selection is enabled, you can choose a method for selecting rows. The **Checkbox** method adds a checkbox to the beginning of each row, and the end-user must click the checkbox to select the row. By contrast, the **Row** method does not add any additional controls to the row, and the end-user must click the row itself to select that row.
+When selection is enabled, you can choose a method for selecting rows. The **Checkbox** method adds a checkbox to the beginning of each row, and the end-user must click the checkbox to select the row. By contrast, the **Row click** method does not add any additional controls to the row, and the end-user must click the row itself to select that row.
-### Show (Un)check All Toggle
+### "Select All" Checkbox
-If this setting is enabled, then the data grid widget shows a checkbox at the header. This checkbox controls the selection for all visible items. Clicking on this checkbox will select all visible items. If all items are already selected, clicking the checkbox clears the selection.
+If the **"Select all" checkbox** setting is enabled, then the data grid widget shows a checkbox at the header. This setting is available only when **Selection** is set to **Multi** and **Selection method** is set to **Checkbox**. This checkbox controls the selection for all rows on the current page. Clicking on this checkbox will select all rows on the current page. If all items are already selected, clicking the checkbox clears the selection.
### Keep Selection
@@ -596,22 +576,22 @@ The setting for action triggers is related to the selection method and can somet
| ---------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------- | --------- |
| Checkbox | Single click on the row | Click on the checkbox, Ctrl + click on the row (or Command + click on the row on Mac) | Yes |
| Checkbox | Double-click on the row | Click on the checkbox, Ctrl + click on the row (or Command + click on the row on Mac) | Yes |
-| Row | Single click on the row | | No |
-| Row | Double-click on the row | Ctrl + click on the row (or Command + click on the row on Mac) | Yes |
+| Row click | Single click on the row | | No |
+| Row click | Double-click on the row | Click on the row; Ctrl + click (or Command + click on Mac) toggles the row | Yes |
-To achieve this behavior, set the **On click trigger** to **Double click**. When a data grid is configured this way, the user may select a row by double-clicking it.
+To use the **Row click** selection method together with an on-click action, set the **On click trigger** to **Double click**. When a data grid is configured this way, the end-user selects a row with a single click and triggers the action by double-clicking the row.
-### Selection and Header Actions
+### Selection and Actions in the Filters Placeholder
-When the button is placed in a grid header, the assigned action can receive the currently selected rows as a parameter.
+When the button is placed in the [filters placeholder](/appstore/modules/data-grid-2-properties/#filters-placeholder), the assigned action can receive the currently selected rows as a parameter.
#### How Selection is Passed to Actions
-When a button placed in header triggers a **microflow** or **nanoflow**, the selected rows are passed as input:
+When a button placed in the filters placeholder triggers a **microflow** or **nanoflow**, the selected rows are passed as input:
-* If **Single Selection** is enabled:
+* If **Selection** is set to **Single**:
* The action receives a **single object**.
-* If **Multiple Selection** is enabled:
+* If **Selection** is set to **Multi**:
* The action receives a **list of objects**.
This allows developers to build logic that operates on one or several items.
@@ -627,7 +607,7 @@ This allows developers to build logic that operates on one or several items.
To configure selection, do the following:
1. Enable **Selection** in the data grid 2 widget.
-1. Insert an **Action Button** into the **Header**.
+1. Insert an **Action Button** into the **Filters placeholder**.
1. Configure the button to trigger a microflow or nanoflow.
1. Set the input parameter of the flow to match the selection type (single object or list).
@@ -670,21 +650,21 @@ The name of the filter or data grid can be found at **Properties** > **Common**
**Error**:
-> "The filter widget must be placed inside the column or header of the Data Grid 2.0 or inside header of the Gallery widget."
+> "The filter widget must be placed inside the column or header of the Data grid 2.0 or inside header of the Gallery widget."
* Widget placement is incorrect.
**Solution**:
-Place widget inside Gallery header, Data Grid 2 header, or Data Grid 2 column.
+Place the widget in the filters placeholder of Gallery or Data Grid 2, or in a Data Grid 2 column.
**Error**:
> "Unable to get filter store. Check parent widget configuration."
-* This error indicates that there is issue with widget settings. Most of the time this error happens when widget is placed in the header of Data Grid 2 or Gallery, but the **Filter attributes** setting is still set to **Auto**.
+* This error indicates that there is issue with widget settings. Most of the time this error happens when widget is placed in the header of Data Grid 2 or Gallery, but the **Filter attributes** setting (or **Attribute config** for the drop-down filter) is still set to **Auto**.
**Solution**:
-Switch widget attributes setting to **Custom** and configure the attribute for filtering.
+Switch **Filter attributes** (or **Attribute config** for the drop-down filter) to **Custom** and configure the attribute for filtering.
**Error**:
diff --git a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/datagrid-date-filter.md b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/datagrid-date-filter.md
index d070b8c5446..47669134a32 100644
--- a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/datagrid-date-filter.md
+++ b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/datagrid-date-filter.md
@@ -14,33 +14,35 @@ For more information on using filter widgets, see [Data Grid 2](/appstore/module
### General Tab
-#### Filter Attributes
+#### General
-Provides flexibility in how the filter determines which data to filter. **Auto** mode automatically detects filterable attributes from the parent grid when placed in grid columns. **Custom** mode allows manual specification of target data source and attributes for more complex filtering scenarios including multi-attribute support and cross-entity filtering.
+##### Filter Attributes
-#### Data Source to Filter
+This provides flexibility in how the filter determines which data to filter. **Auto** mode automatically detects filterable attributes from the parent grid when placed in grid columns. **Custom** mode shows the **Attributes** property, where you select the attributes to filter on, including multiple attributes.
-Specifies the target data source that the filter should operate on when using custom mode. Creates a direct reference to the specified data source object, providing access to entity metadata and enabling real-time synchronization with data source state changes. This property is required when **Filter Attributes** is set to **Custom**.
+##### Datasource to Filter
-#### Attributes
+This shows the data source that the filter is linked to. The filter is linked to the data source of the data widget it is placed in, and the attributes in **Attributes** are selected from this data source. This property is only shown when **Filter attributes** is set to **Custom**.
-Allows specification of multiple DateTime attributes that users can filter on. Each attribute in the list becomes a potential target for filtering operations, enabling sophisticated multi-attribute date search capabilities. Only DateTime attributes are supported for date filtering operations.
+##### Attributes
-#### Default Value
+This allows specification of multiple DateTime attributes that users can filter on. Each attribute in the list becomes a potential target for filtering operations, enabling sophisticated multi-attribute date search capabilities. Only DateTime attributes are supported for date filtering operations. This property is only shown when **Filter attributes** is set to **Custom**.
-Sets the initial date value that appears in the filter input when the page loads. This value is applied immediately when the widget initializes. The default value respects expression-based configurations and can be dynamically determined based on business logic.
+##### Default Value
-#### Default Start Date
+This sets the initial date value that appears in the filter input when the page loads. This value is applied immediately when the widget initializes. The default value is an expression that returns a Date and time value, so it can be determined dynamically. This property is hidden when **Default filter** is set to **Between**.
-When the default filter is set to **Between**, this property defines the initial start date for the date range. This value works in conjunction with the **Default End Date** to establish a default date range when the widget loads.
+##### Default Start Date
-#### Default End Date
+When **Default filter** is set to **Between**, this property defines the initial start date for the date range. This value works in conjunction with **Default end date** to establish a default date range when the widget loads. This property is only shown when **Default filter** is set to **Between**.
-When the default filter is set to **Between**, this property defines the initial end date for the date range. This value works in conjunction with the **Default Start Date** to establish a default date range when the widget loads.
+##### Default End Date
-#### Default Filter
+When **Default filter** is set to **Between**, this property defines the initial end date for the date range. This value works in conjunction with **Default start date** to establish a default date range when the widget loads. This property is only shown when **Default filter** is set to **Between**.
-Determines the initial filter operation type when the widget loads. Available options include the following:
+##### Default Filter
+
+This determines the initial filter operation type when the widget loads. The default is **Equal**. Available options include the following:
* **Between**: matches records where the date falls within a specified range (requires both start and end dates)
* **Greater than**: matches records where the date is after the specified date
@@ -52,44 +54,46 @@ Determines the initial filter operation type when the widget loads. Available op
* **Empty**: matches records where the date attribute has no value
* **Not empty**: matches records where the date attribute has any value
-#### Placeholder
+##### Placeholder
+
+This displays hint text in the input field when no date is selected. It can help users understand the expected date format, or can provide guidance on date selection. Supports text templates for dynamic content and localization.
-Displays hint text in the input field when no date is selected. It can help users understand the expected date format, or can provide guidance on date selection. Supports text templates for dynamic content and localization.
+##### Adjustable by User
-#### Adjustable by User
+This controls whether users can change the filter operation type. When set to **Yes**, a drop-down button appears next to the date input allowing users to select different filter operations. When set to **No**, only the default filter operation is available and the drop-down button is hidden.
-Controls whether users can change the filter operation type. When set to **Yes**, a dropdown button appears next to the date input allowing users to select different filter operations. When set to **No**, only the default filter operation is available and the dropdown is hidden.
+#### Configurations
-### Configurations
+##### Saved Attribute
-#### Saved Attribute
+This specifies an entity attribute used to store the last filter value for persistence. The attribute must be of type DateTime. When configured, the filter automatically saves its current value to this attribute when changes occur. The saved value is not applied to the widget automatically. To restore a previously saved value, use the same attribute in the **Default value** expression. This property is hidden when **Default filter** is set to **Between**.
-Specifies an entity attribute used to store the last filter value for persistence. The attribute must be of type DateTime. When configured, the filter automatically saves its current value to this attribute when changes occur. To restore previously saved values, configure the same attribute as the **Default Value**.
+##### Saved Start Date Attribute
-#### Saved Start Date Attribute
+This specifies an entity attribute used to store the start date when using the **Between** filter mode. The attribute must be of type DateTime. This works in conjunction with **Saved end date attribute** to persist date range selections. To restore a previously saved value, use the same attribute in the **Default start date** expression. This property is only shown when **Default filter** is set to **Between**.
-Specifies an entity attribute used to store the start date when using the **Between** filter mode. The attribute must be of type DateTime. This works in conjunction with the **Saved End Date Attribute** to persist date range selections across user sessions.
+##### Saved End Date Attribute
-#### Saved End Date Attribute
+This specifies an entity attribute used to store the end date when using the **Between** filter mode. The attribute must be of type DateTime. This works in conjunction with **Saved start date attribute** to persist date range selections. To restore a previously saved value, use the same attribute in the **Default end date** expression. This property is only shown when **Default filter** is set to **Between**.
-Specifies an entity attribute used to store the end date when using **Between** filter mode. The attribute must be of type DateTime. This works in conjunction with the **Saved Start Date Attribute** to persist date range selections across user sessions.
+#### Events
-### Events
+##### On Change
-#### On Change
+This defines an action to be executed whenever the filter value or filter type changes. This event is triggered for every user interaction including date selection, changing filter operations, or clearing the filter. It can be used to trigger microflows, nanoflows, or other actions for custom business logic.
-Defines an action to be executed whenever the filter value or filter type changes. This event is triggered for every user interaction including date selection, changing filter operations, or clearing the filter. It can be used to trigger microflows, nanoflows, or other actions for custom business logic.
+### Accessibility Tab
-### Accessibility
+#### Screen Reader
-#### Comparison Button Caption
+##### Comparison Button Caption
-Provides an accessible label for the filter type selection button. This label is announced by screen readers when users navigate to the drop-down menu that shows available filter operations. Employing this correctly is essential for users relying on assistive technology.
+This provides an accessible label for the filter type selection button. This label is announced by screen readers when users navigate to the drop-down menu that shows available filter operations. Employing this correctly is essential for users relying on assistive technology. This property is only shown when **Adjustable by user** is set to **Yes**.
-#### Calendar Button Caption
+##### Calendar Button Caption
-Defines the accessible label for the calendar picker button that opens the date selection interface. Screen readers announce this label when users navigate to the button, helping them understand how to access the date picker functionality.
+This defines the accessible label for the calendar picker button that opens the date selection interface. Screen readers announce this label when users navigate to the button, helping them understand how to access the date picker functionality.
-#### Input Caption
+##### Input Caption
-Defines the accessible label for the date input field. Screen readers announce this label when users focus on the input field. This property users understand that date input is expected, and may include format guidance or context-specific information.
+This defines the accessible label for the date input field. Screen readers announce this label when users focus on the input field. This property helps users understand that date input is expected, and may include format guidance or context-specific information.
diff --git a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/datagrid-dropdown-filter.md b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/datagrid-dropdown-filter.md
index d5eff3e5c2c..2f7b4f279a6 100644
--- a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/datagrid-dropdown-filter.md
+++ b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/datagrid-dropdown-filter.md
@@ -1,12 +1,12 @@
---
-title: "Dropdown Filter"
+title: "Drop-Down Filter"
url: /appstore/modules/datagrid-dropdown-filter/
-description: "This document describes the properties of the Dropdown Filter widget and their configurations."
+description: "This document describes the properties of the Drop-Down Filter widget and their configurations."
---
## Introduction
-This guide lists all the properties of the Dropdown Filter widget used with the [Data Grid 2](/appstore/modules/data-grid-2/) widget. The dropdown filter allows users to filter enumeration values, Boolean attributes, or association attributes through a dropdown selection interface with advanced features like multi-select and search capabilities.
+This guide lists all the properties of the Drop-Down Filter widget used with the [Data Grid 2](/appstore/modules/data-grid-2/) widget. The drop-down filter allows users to filter enumeration values, Boolean attributes, or associations through a drop-down list with advanced features like multi-select and search capabilities.
For more information on using filter widgets, see [Data Grid 2](/appstore/modules/data-grid-2/#filters).
@@ -14,111 +14,133 @@ For more information on using filter widgets, see [Data Grid 2](/appstore/module
### General Tab
-#### Data Source Section
+#### Data Source
##### Filter By
-Determines the type of filtering the dropdown filter will perform:
+This determines the type of filtering the drop-down filter performs:
* **Attribute**: filters based on entity attributes (enumerations, Booleans)
* **Association**: filters based on entity associations and references
-##### Data Source of Widget
+##### Datasource to Filter
-This setting is displaying what data sourced is currently used to configure the filter.
-
-#### Attribute Type Configuration
+This shows the data source that the filter is linked to and that is used to configure the filter. When **Filter by** is set to **Attribute**, this property is only shown if **Attribute config** is set to **Custom**.
##### Attribute Config
-Provides flexibility in how the filter determines which data to filter. **Auto** mode automatically detects filterable attributes from the parent grid when placed in grid columns. **Custom** mode allows manual specification of target data source and attributes for more complex filtering scenarios.
+This determines how the filter finds the attribute to filter on. This property is only available when **Filter by** is set to **Attribute**:
+
+* **Auto**: uses the attribute of the Data grid column that the filter is placed in. This option works only when the widget is placed in a Data grid column.
+* **Custom**: lets you select the attribute to filter on in the **Attribute** property.
##### Attribute
-Specifies the target attribute for filtering when using attribute-based filtering. Supported attribute types include the following:
+This specifies the target attribute for filtering. This property is only shown when **Filter by** is set to **Attribute** and **Attribute config** is set to **Custom**. Supported attribute types include the following:
* **Enum**: enumeration attributes with predefined values
* **Boolean**: true/false attributes
##### Automatic Options
-When set to **Yes**, the dropdown automatically populates with all available values from the enumeration or Boolean attribute. When set to **No**, custom options must be manually configured in the **Options** list.
+When set to **Yes**, the drop-down list shows options based on the enumeration values and captions, or on the Boolean values. When set to **No**, custom options must be manually configured in the **Options** list. This property is only available when **Filter by** is set to **Attribute**.
##### Options
-Allows manual specification of dropdown options when Automatic Options is disabled. Each option contains the following:
+This allows manual specification of drop-down options. This property is only shown when **Filter by** is set to **Attribute** and **Automatic options** is set to **No**. Each option contains the following:
* **Caption**: display text shown to users
-* **Value**: actual value used for filtering
-
-#### Association Type Configuration
+* **Value**: an expression that returns the value used for filtering; for an enumeration, it must match the enumeration value exactly
##### Entity
-Defines the entity that will be used for filtering over association. Supports both **Reference** and **ReferenceSet** association types. This property is required when **Filter By** is set to **Association**.
+This defines the association that is used for filtering. Supports both **Reference** and **ReferenceSet** association types. This property is only shown, and required, when **Filter by** is set to **Association**.
##### Selectable Objects
-Defines the data source that provides the list of entities available for selection. This data source should return all possible entities that could be associated with the parent entity. The dropdown filter will display these entities as selectable options.
+This defines the data source that provides the list of objects available for selection. This data source should return all possible objects that could be associated with the filtered entity. The drop-down filter displays these objects as selectable options. This property is only available when **Filter by** is set to **Association**.
+
+##### Caption Source
+
+This determines how the caption of each option is defined when **Filter by** is set to **Association**:
+
+* **Attribute**: uses a string attribute of the selectable objects
+* **Expression**: uses an expression that returns a string
##### Caption
-Specifies the attribute from the selectable objects that will be displayed as the option text in the dropdown filter. Must be a string attribute from the entity defined in the **Selectable Objects** data source.
+This specifies the text that is displayed for each option in the drop-down filter. When **Caption source** is set to **Attribute**, select a string attribute from the entity of the **Selectable objects** data source. When **Caption source** is set to **Expression**, define an expression that returns a string.
+
+##### Search Attribute
+
+This specifies the string attribute of the selectable objects that is used to search options. This property is only shown when **Caption source** is set to **Expression** and **Filterable** is set to **Yes**, and is required in that case. When **Caption source** is set to **Attribute**, the search uses the **Caption** attribute.
##### Use Lazy Load
-Controls when dropdown filter options are loaded. When set to **No** (recommended), options are loaded immediately providing better personalization support and value restoration. When set to **Yes**, options are loaded on demand when the dropdown filter is first opened, improving initial page load performance but limiting personalization capabilities.
+This controls when drop-down filter options are loaded. When set to **No** (recommended), options are loaded immediately providing better personalization support and value restoration. When set to **Yes**, options are loaded on demand when the drop-down filter is first opened, improving initial page load performance but limiting personalization capabilities. This property is only available when **Filter by** is set to **Association**.
-#### General Configuration
+#### General
##### Default Value
-Sets the initial value that is selected in the dropdown filter when the page loads. For association filtering, this should match one of the available entity values. For attribute filtering, this should match one of the enumeration or Boolean values.
+This sets the initial value that is selected in the drop-down filter when the page loads. The expression returns a String. To select multiple options, separate the values with commas; when **Multiselect** is set to **No**, only the first value is used. For attribute filtering, each value must match an enumeration value, a Boolean value (`true` or `false`), or the **Value** of a custom option. For association filtering, each value must be the object ID of one of the selectable objects. The empty option caption is shown by default, or when the configured default value matches none of the options.
##### Filterable
-When set to **Yes**, adds a search input to the dropdown allowing users to quickly find options by typing. This is especially useful for dropdowns with many options. The search functionality works on the display captions.
+When set to **Yes**, this adds a search input to the drop-down list allowing users to quickly find options by typing. This is especially useful for drop-down lists with many options.
##### Multiselect
-Enables selection of multiple options simultaneously. When enabled, users can select multiple enumeration values, Boolean states, or associated entities. The filter will match records that contain any of the selected values.
+This enables selection of multiple options simultaneously. When enabled, users can select multiple enumeration values, Boolean states, or associated entities. The filter matches records that contain any of the selected values.
##### Empty Option Caption
-Defines the text displayed for the "empty" or "no selection" option. This option allows users to clear the filter.
+This defines the text displayed for the **empty** or **no selection** option. This option allows users to clear the filter. The default value is "None". This property is only shown when both **Filterable** and **Multiselect** are set to **No**.
##### Clearable
-When set to **Yes**, adds a clear button that allows users to quickly remove their current selection. This provides an easy way to reset the filter without having to manually deselect options.
+When set to **Yes**, this adds a clear button that allows users to quickly remove their current selection. This provides an easy way to reset the filter without having to manually deselect options. This property is hidden when **Filterable** is set to **Yes**, because a filterable drop-down filter is always clearable.
##### Show Selected Items As
-Controls how selected options are displayed when multiselect is enabled:
+This controls how selected options are displayed. This property is only shown when both **Filterable** and **Multiselect** are set to **Yes**:
* **Text**: shows selected items as comma-separated text
-* **Labels**: shows selected items as individual removable labels/tags
+* **Labels**: shows selected items as individual removable labels
##### Selection Method
-Determines how users can select options in multiselect mode:
+This determines how users can select options. This property is only shown when **Filterable** and **Multiselect** are set to **Yes** and **Show selected items as** is set to **Labels**:
* **Checkbox**: adds checkboxes next to each option for explicit selection
-* **Row Click**: allows selection by clicking anywhere on the option row
+* **Row click**: allows selection by clicking anywhere on the option row
+
+#### Configurations
+
+##### Saved Attribute
+
+This specifies an entity attribute used to store the last filter value for persistence. The attribute must be of type String. When configured, the filter automatically saves its current selection to this attribute when changes occur. Note that associations are not supported for saved attributes.
+
+#### Events
+
+##### On Change
+
+This defines an action to be executed whenever the filter selection changes. This event is triggered when users select or deselect options, clear the filter, or change the selection in any way. Can be used to trigger microflows, nanoflows, or other actions for custom business logic.
-### Configurations
+### Advanced Tab
-#### Saved Attribute
+#### Accessibility
-Specifies an entity attribute used to store the last filter value for persistence. The attribute must be of type string. When configured, the filter automatically saves its current selection to this attribute when changes occur. Note that associations are not supported for saved attributes.
+##### Input Caption
-### Events
+This defines the accessible label for the drop-down input element. Screen readers announce this label when users focus on the drop-down filter. Employing this correctly is essential for users relying on assistive technology.
-#### On Change
+#### Texts
-Defines an action to be executed whenever the filter selection changes. This event is triggered when users select or deselect options, clear the filter, or change the selection in any way. Can be used to trigger microflows, nanoflows, or other actions for custom business logic.
+##### Empty Selection Caption
-### Accessibility
+This defines the text shown when no options are selected, for example, "Select color" or "No options are selected". The default value is "Select".
-#### Input Caption
+##### Filter Input Placeholder
-Defines the accessible label for the dropdown input element. Screen readers announce this label when users focus on the dropdown. Employing this correctly is essential for users relying on assistive technology.
+This defines the placeholder text of the search input, for example, "Type to search". The default value is "Search". This property is only shown when **Filterable** is set to **Yes**.
diff --git a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/datagrid-number-filter.md b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/datagrid-number-filter.md
index 0bf6fa184a8..5b879f585f4 100644
--- a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/datagrid-number-filter.md
+++ b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/datagrid-number-filter.md
@@ -14,30 +14,35 @@ For more information on using filter widgets, see [Data Grid 2](/appstore/module
### General Tab
-#### Filter Attributes
+#### General
-Provides flexibility in how the filter determines which data to filter. **Auto** mode automatically detects filterable attributes from the parent grid when placed in grid columns. **Custom** mode allows manual specification of target data source and attributes for more complex filtering scenarios including multi-attribute support.
+##### Filter Attributes
-#### Data Source to Filter
+Determines which attributes the filter applies to. The default is **Auto**. The options are the following:
-Specifies the target data source that the filter should operate on when using Custom mode. Creates a direct reference to the specified data source object, providing access to entity metadata and enabling real-time synchronization with data source state changes. This property is required when Filter Attributes is set to Custom.
+* **Auto** – This uses the attribute of the Data Grid 2 column that the filter is placed in. This option works only when the filter is placed in a column.
+* **Custom** – This shows the **Attributes** property, where you select one or more attributes to filter on. Use this option when the filter is placed outside a column, such as in the filters placeholder of Data Grid 2 or Gallery.
-#### Attributes
+##### Datasource to Filter {#data-source-to-filter}
-Allows specification of multiple numeric attributes that users can filter on. Each attribute in the list becomes a potential target for filtering operations, enabling sophisticated multi-attribute numerical search capabilities. Supported attribute types include:
+Shows the data source that the filter is linked to. The filter is linked to the data source of the data widget it is placed in, and the attributes in **Attributes** are selected from this data source. This property is only shown when **Filter attributes** is set to **Custom**.
+
+##### Attributes
+
+Allows specification of multiple numeric attributes that users can filter on. Each attribute in the list becomes a potential target for filtering operations, enabling multi-attribute numerical search. This property is only visible when **Filter attributes** is set to **Custom**. Each item in the list has one **Attribute** property, which supports the following attribute types:
* **AutoNumber**: system-generated sequential numbers
* **Decimal**: decimal numbers with fractional parts
* **Integer**: whole numbers within integer range
* **Long**: large whole numbers within long range
-#### Default Value
+##### Default Value
-Sets the initial numeric value that appears in the filter input when the page loads. This value is applied immediately when the widget initializes. The default value respects expression-based configurations and can be dynamically determined. The value must be compatible with the target attribute's data type.
+Sets the initial numeric value that appears in the filter input when the page loads. This value is applied immediately when the widget initializes. The default value is an expression that returns a Decimal value, so it can be dynamically determined. The value must be compatible with the target attribute's data type.
-#### Default Filter
+##### Default Filter
-Determines the initial filter operation type when the widget loads. Available options include the following:
+Determines the initial filter operation type when the widget loads. The default is **Equal**. Available options include the following:
* **Greater than**: matches records where the numeric value is greater than the specified number
* **Greater than or equal**: matches records where the numeric value is greater than or equal to the specified number
@@ -48,38 +53,40 @@ Determines the initial filter operation type when the widget loads. Available op
* **Empty**: matches records where the numeric attribute has no value
* **Not empty**: matches records where the numeric attribute has any value
-#### Placeholder
+##### Placeholder
Displays hint text in the input field when no value is entered. Helps users understand what type of numeric input is expected. Can include format guidance (for example, "Enter amount in dollars") or range information. Supports text templates for dynamic content and localization.
-#### Adjustable by User
+##### Adjustable by User
-Controls whether users can change the filter operation type. When set to **Yes**, a dropdown button appears next to the input allowing users to select different filter operations. When set to **No**, only the default filter operation is available and the dropdown button is hidden.
+Controls whether users can change the filter operation type. When set to **Yes** (default), a drop-down button appears next to the input allowing users to select different filter operations. When set to **No**, only the default filter operation is available and the drop-down button is hidden.
-### On Change Behavior
+#### On Change Behavior
-#### Apply After (ms)
+##### Apply After (ms)
-Specifies the delay in milliseconds before filter changes are applied to the grid. This debouncing mechanism prevents excessive server requests while users are typing numeric values. The default value of 500ms provides a good balance between responsiveness and performance. Lower values provide faster feedback but may impact performance with large datasets.
+Specifies the delay in milliseconds before filter changes are applied to the grid. This debouncing mechanism prevents excessive server requests while users are typing numeric values. The default value of 500 ms provides a good balance between responsiveness and performance. Lower values provide faster feedback but may impact performance with large datasets.
-### Configurations
+#### Configurations
-#### Saved Attribute
+##### Saved Attribute
-Specifies an entity attribute used to store the last filter value for persistence. The attribute must be of a compatible numeric type (autonumber, decimal, integer, or long). When configured, the filter automatically saves its current value to this attribute when changes occur. To restore previously saved values, configure the same attribute as the **Default Value**.
+Specifies an entity attribute used to store the last filter value for persistence. The attribute must be of a compatible numeric type (AutoNumber, Decimal, Integer, or Long). When configured, the filter automatically saves its current value to this attribute when changes occur. The saved value is not applied to the widget automatically. To restore a previously saved value, use the same attribute in the **Default value** expression.
-### Events
+#### Events
-#### On Change
+##### On Change
Defines an action to be executed whenever the filter value or filter type changes. This event is triggered for every user interaction including typing, selecting different filter operations, or clearing the filter. Can be used to trigger microflows, nanoflows, or other actions for custom business logic.
-### Accessibility
+### Accessibility Tab {#accessibility}
+
+#### Screen Reader
-#### Comparison Button Caption
+##### Comparison Button Caption
-Provides an accessible label for the filter type selection button. This label is announced by screen readers when users navigate to the drop-down menu that shows available filter operations. Employing this correctly is essential for users relying on assistive technology.
+Provides an accessible label for the filter type selection button. This label is announced by screen readers when users navigate to the drop-down menu that shows available filter operations. Employing this correctly is essential for users relying on assistive technology. This property is only shown when **Adjustable by user** is set to **Yes**.
-#### Input Caption
+##### Input Caption
-Defines the accessible label for the numeric input field. Screen readers announce this label when users focus on the input field. Supports localization with built-in translations for English, German, and Dutch. Can be customized to provide context-specific information about the expected numeric format or range.
+Defines the accessible label for the numeric input field. Screen readers announce this label when users focus on the input field. Supports localization with built-in translations for English, German, and Dutch (the English default is "Search"). Can be customized to provide context-specific information about the expected numeric format or range.
diff --git a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/datagrid-text-filter.md b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/datagrid-text-filter.md
index 071d4166ab4..45b52248c76 100644
--- a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/datagrid-text-filter.md
+++ b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/datagrid-text-filter.md
@@ -14,25 +14,27 @@ For more information on using filter widgets, see [Data Grid 2](/appstore/module
### General Tab
-#### Filter Attributes
+#### General
-Provides flexibility in how the filter determines which data to filter. **Auto** mode automatically detects filterable attributes from the parent grid when placed in grid columns. **Custom** mode allows manual specification of target data source and attributes for more complex filtering scenarios including multi-attribute support.
+##### Filter Attributes
-#### Data Source to Filter
+This provides flexibility in how the filter determines which data to filter. **Auto** mode automatically detects filterable attributes from the parent grid when placed in grid columns. **Custom** mode shows the **Attributes** property, where you select the attributes to filter on, including multiple attributes.
-Specifies the target data source that the filter should operate on when using custom mode. Creates a direct reference to the specified data source object, providing access to entity metadata and enabling real-time synchronization with data source state changes. This property is required when **Filter Attributes** is set to **Custom**.
+##### Datasource to Filter
-#### Attributes
+This property is always hidden in Studio Pro, so you do not configure it directly. The filter is linked to the data source of the data widget it is placed in, and the attributes in **Attributes** are selected from this data source.
-Allows specification of multiple string attributes that users can filter on. Each attribute in the list becomes a potential target for filtering operations, enabling sophisticated multi-attribute search capabilities. Only String attributes are supported for text filtering operations.
+##### Attributes
-#### Default Value
+This allows specification of multiple string attributes that users can filter on. Each attribute in the list becomes a potential target for filtering operations, enabling multi-attribute search. For each item, select an **Attribute** of type String. This property is only shown when **Filter attributes** is set to **Custom**.
-Sets the initial text value that appears in the filter input when the page loads. This value is applied immediately when the widget initializes. The default value respects expression-based configurations and can be determined dynamically.
+##### Default Value
-#### Default Filter
+This sets the initial text value that appears in the filter input when the page loads. This value is applied immediately when the widget initializes. The default value is an expression that returns a String, so it can be determined dynamically.
-Determines the initial filter operation type when the widget loads. Available options include:
+##### Default Filter
+
+This determines the initial filter operation type when the widget loads. The default is **Contains**. Available options include:
* **Contains**: matches records where the attribute contains the search text
* **Starts with**: matches records where the attribute begins with the search text
@@ -46,38 +48,40 @@ Determines the initial filter operation type when the widget loads. Available op
* **Empty**: matches records where the attribute has no value
* **Not empty**: matches records where the attribute has any value
-#### Placeholder
+##### Placeholder
+
+This displays hint text in the input field when no value is entered. Helps users understand what type of input is expected. Supports text templates for dynamic content and localization.
-Displays hint text in the input field when no value is entered. Helps users understand what type of input is expected. Supports text templates for dynamic content and localization.
+##### Adjustable by User
-#### Adjustable by User
+This controls whether users can change the filter operation type. When set to **Yes**, a drop-down button appears next to the input allowing users to select different filter operations. When set to **No**, only the default filter operation is available and the drop-down button is hidden.
-Controls whether users can change the filter operation type. When set to **Yes**, a dropdown button appears next to the input allowing users to select different filter operations. When set to **No**, only the default filter operation is available and the dropdown button is hidden.
+#### On Change Behavior
-### On Change Behavior
+##### Apply After (ms)
-#### Apply After (ms)
+This specifies the delay in milliseconds before filter changes are applied to the grid. This debouncing mechanism prevents excessive server requests while users are typing. The default value of 500ms provides a good balance between responsiveness and performance. Lower values provide faster feedback but may impact performance with large datasets.
-Specifies the delay in milliseconds before filter changes are applied to the grid. This debouncing mechanism prevents excessive server requests while users are typing. The default value of 500ms provides a good balance between responsiveness and performance. Lower values provide faster feedback but may impact performance with large datasets.
+#### Configurations
-### Configurations
+##### Saved Attribute
-#### Saved Attribute
+This specifies an entity attribute used to store the last filter value for persistence. The attribute must be of type String or Hashed string. When configured, the filter automatically saves its current value to this attribute when changes occur. The saved value is not applied to the widget automatically. To restore a previously saved value, use the same attribute in the **Default value** expression.
-Specifies an entity attribute used to store the last filter value for persistence. The attribute must be of a compatible numeric type (autonumber, decimal, integer, or long). When configured, the filter automatically saves its current value to this attribute when changes occur. To restore previously saved values, configure the same attribute as the **Default Value**.
+#### Events
-### Events
+##### On Change
-#### On Change
+This defines an action to be executed whenever the filter value or filter type changes. This event is triggered for every user interaction including typing, selecting different filter operations, or clearing the filter. Can be used to trigger microflows, nanoflows, or other actions for custom business logic.
-Defines an action to be executed whenever the filter value or filter type changes. This event is triggered for every user interaction including typing, selecting different filter operations, or clearing the filter. Can be used to trigger microflows, nanoflows, or other actions for custom business logic.
+### Accessibility Tab
-### Accessibility
+#### Screen Reader
-#### Comparison Button Caption
+##### Comparison Button Caption
-Provides an accessible label for the filter type selection button. This label is announced by screen readers when users navigate to the drop-down menu that shows available filter operations. Employing this correctly is essential for users relying on assistive technology.
+This provides an accessible label for the filter type selection button. This label is announced by screen readers when users navigate to the drop-down menu that shows available filter operations. Employing this correctly is essential for users relying on assistive technology. This property is only shown when **Adjustable by user** is set to **Yes**.
-#### Input Caption
+##### Input Caption
-Defines the accessible label for the numeric input field. Screen readers announce this label when users focus on the input field. Supports localization with built-in translations for English, German, and Dutch. Can be customized to provide context-specific information about the expected numeric format or range.
+This defines the accessible label for the text input field. Screen readers announce this label when users focus on the input field. The default value is "Search", with built-in translations for English, German ("Suche"), and Dutch ("Zoeken"). Can be customized to provide context-specific information about the expected search text.
diff --git a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/gallery.md b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/gallery.md
index ba1f91ddbd5..5b63054afdb 100644
--- a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/gallery.md
+++ b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/gallery.md
@@ -7,38 +7,27 @@ description: "Describes the configuration and usage of the Gallery widget, which
## Introduction
-The [Gallery](https://marketplace.mendix.com/link/component/116540) widget, a replacement for both the template grid and list view, helps you build beautiful lists and grids for desktop, tablet, and mobile devices. Featuring the same filtering and sorting as seen in [Data Grid 2](https://marketplace.mendix.com/link/component/116540), the Gallery widget also provides options for varying columns per device type and gives you the power to create amazing grid and list experiences for every user.
+The [Gallery](https://marketplace.mendix.com/link/component/116540) widget, a replacement for both the template grid and list view, helps you build beautiful lists and grids for desktop, tablet, and mobile devices. Featuring the same filtering and sorting as seen in [Data Grid 2](/appstore/modules/data-grid-2/), the Gallery widget also provides options for varying columns per device type and gives you the power to create amazing grid and list experiences for every user.
-Here is an example of a Gallery widget using filters:
+Here is an example of a Gallery widget using a filter and a sort:
{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/example.png" alt="Example of gallery using filter and sort" width="300" class="no-border" >}}
-### Advanced Options
-
-The gallery has an option to enable advanced options. When this option is toggled on, it enables numerous features to customize your gallery:
-
-* Pagination type
-* Pagination position
-* Empty list option
-* Dynamic item class
-* Filtering
-* Sorting
-
## Configuration
Several options can be defined in the Gallery widget:
### Data Source
-Data source specifies the source of the data being presented in the Gallery. You can select data from **Database**, **Association**, **Microflow**, **Nanoflow**, or **Xpath**.
+Data source specifies the source of the data being presented in the Gallery. You can select data from **Database** (optionally with an XPath constraint), **Association**, **Microflow**, or **Nanoflow**.
### Columns
-We provide a mechanism that automatically applies a different number of columns based on the device being used. In the Gallery widget, you can select columns for **Desktops**, **Tablets**, or **Phone/Mobile**.
+The Gallery widget applies a different number of columns based on the device being used. You can set **Desktop columns**, **Tablet columns**, and **Phone columns**.
### Items
-In the items group you can define the properties related to the items being presented.
+On the **Behavior** tab, you can define the properties related to the items being presented. **Page size**, **Pagination**, and **Position of pagination** are in the **Pagination** group. **Empty message** and **Dynamic item class** are in the **Appearance** group.
#### Page size
@@ -47,14 +36,14 @@ Defines the amount of data shown for each page or the limit to be presented when
#### Pagination
{{% alert color="info" %}}
-This widget does not support [system texts](/refguide/system-texts/), meaning is not possible to translate its content to another language.
+The pagination status text and the screen reader labels of the paging buttons are currently written in English and cannot be translated. We are working to improve this in the future.
{{% /alert %}}
-You can choose between paging buttons (button being presented below or above the grid) or virtual scrolling (mechanism that automatically loads data when the users reaches the bottom of the scroll bar).
+You can choose between paging buttons (buttons presented below or above the grid), virtual scrolling (a mechanism that automatically loads data when the user reaches the bottom of the scroll bar), or load more (a button that loads more items).
-#### Position of Paging Buttons
+#### Position of Pagination
-This option is only available when `Pagination` is marked as `Paging buttons` and defines its position relative to the grid items.
+This option defines the position of the pagination relative to the grid items: **Below grid**, **Above grid**, or **Both**. It is available when **Pagination** is set to **Paging buttons**, or when **Pagination** is set to **Virtual scrolling** or **Load more** and **Show total count** is enabled.
#### Empty Message
@@ -64,9 +53,9 @@ When this option is defined as custom it will show a composable region. Here you
#### Dynamic Item Class
-In the new Gallery widget we offer an option to dynamically apply a CSS class to a specific item. You can achieve this by adding an expression based on the item values (attributes) like the example below.
+The Gallery widget can dynamically apply a CSS class to a specific item. You can achieve this by adding an expression based on the item values (attributes), as in the example below.
-In this example we check the value of `CountryName`, then if the attribute is equal to `Spain` apply the class `.my-custom-class` to the items:
+This example checks the value of `CountryName` and, if the attribute is equal to `Spain`, applies the class `my-custom-class` to the items:
{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/dynamic-item-class.png" alt="Example of dynamic item class" width="300" class="no-border" >}}
@@ -80,60 +69,39 @@ Triggers an action (such as a nanoflow, microflow, or Show page action) when the
## Filtering
-{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/filtering.gif" alt="Example of filtering" width="300" class="no-border" >}}
-
-In order to enable filtering within the gallery items you need to select the desired attributes to be filtered in the **Filtering** tab. You can select attributes of the following types:
-
-* Autonumber
-* Boolean
-* Date & time
-* Decimal
-* Enumeration
-* Hashed string
-* Integer
-* Long
-* String
-
-The attributes selected here will be used for the matching filter placed inside the composable region. When using multiple attributes, the filters will automatically select the matching attributes and then compose the desired filter value in an `OR expression`. Make sure you just have one filter widget for each type, for example `Text Filter` and `Number Filter`.
-
{{% alert color="info" %}}
-If a filter is being used and its type does not match with any selected attribute it will throw an error requesting you to select the correct filter widget.
+Starting with [Data Widgets](/appstore/modules/data-widgets/) 3.0.0, filtering is configured in the filter widgets. When you update the module, existing grid-wide filtering configurations are automatically converted to the new setup.
{{% /alert %}}
-An example of filtering configuration:
+To filter the gallery items, place filter widgets in the gallery's filters placeholder. The gallery does not have its own filtering configuration. Instead, configure the filter widgets themselves. Filter widgets placed in the filters placeholder are linked to the gallery automatically. To choose which attributes a filter applies to, set the filter widget to custom mode and select the attributes.
-{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/filtering.png" alt="Example of filtering configuration" width="300" class="no-border" >}}
+For more information, see the [Filters](/appstore/modules/data-grid-2/#filters) section of *Data Grid 2* and the documentation for each filter widget:
-An example of text filter being used in the composable region combined with a drop-down sort:
-
-{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/filter-region.png" alt="Example of filtering composable region" width="300" class="no-border" >}}
-
-For more information about filters, see the [Filters](/appstore/modules/data-grid-2/#filters) section of *Data Grid 2*.
+* [Text Filter](/appstore/modules/datagrid-text-filter/)
+* [Number Filter](/appstore/modules/datagrid-number-filter/)
+* [Date Filter](/appstore/modules/datagrid-date-filter/)
+* [Drop-Down Filter](/appstore/modules/datagrid-dropdown-filter/)
## Sorting
-{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/sorting.gif" alt="Example of sorting" width="300" class="no-border" >}}
-
-In the new Gallery widget it is possible to add sorting widgets to the composable region and use them based on the configurations available in the **Sorting** tab. In order to make the attributes available for the sorting widgets, you must select an attribute and define the name it will show via the sort button.
+To sort the gallery items, place a [Drop-Down Sort](#dropdown) widget in the gallery's filters placeholder. If you place it outside the filters placeholder, the widget shows an error that it is out of context. The gallery does not have its own sorting configuration. Instead, you select the attributes that end-users can sort by in the Drop-Down Sort widget.
{{% alert color="info" %}}
-If you have a sorting applied in the datasource of the gallery it will pre-select the value in the drop-down filter if it matches the selection made in the configurations and override the filter selected in the datasource in case you have more options defined.
+If the data source of the gallery has a sort order, the Drop-Down Sort widget pre-selects it when it matches one of the attributes configured in the widget. When end-users select a different option, it overrides the sort order of the data source.
{{% /alert %}}
-{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/sorting.png" alt="Example of sorting configuration" width="300" class="no-border" >}}
-
### Drop-Down Sort {#dropdown}
-The Drop-Down Sort widget is a widget you can use in combination with the Gallery widget. The Drop-Down Sort widget just needs to be placed inside a composable region of the Gallery widget after defining the sorting attributes in the Gallery widget's **Sorting** tab.
-
-The Drop-Down Sort widget has two options you can set:
+The Drop-Down Sort widget lets end-users choose the attribute and direction to sort the gallery items by. Place it inside the filters placeholder of the Gallery widget and configure these properties:
-* Empty option caption: value to be used when no value is selected
-* Screen reader caption: value to be announced by screen readers when using assistive technology
+* **Datasource to sort**: the data source of the gallery, linked automatically when the widget is placed in the filters placeholder
+* **Attributes**: the attributes that end-users can sort by; for each attribute, set the **Caption** shown in the drop-down
+* **Empty option caption**: the text shown when no sort option is selected
+* **Sort order button caption** and **Input caption**: the text announced by screen readers when using assistive technology
## Selection
-Enabling **Selection** allows users to select gallery items via clicking. Selection is disabled by default and can be activated by changing the **Selection** setting from **None** to either **Single** or **Multi**.
+Enabling **Selection** allows users to select gallery items via clicking. Selection is disabled by default and can be activated by changing the **Selection** setting on the **Behavior** tab from **None** to either **Single** or **Multi**.
The Gallery widget keeps selected items in memory and supports selection persistence across page navigation when the **Keep selection** option is enabled. This allows users to maintain their selections while browsing through paginated data or navigating between different pages in your application. See [Keep Selection](#keep-selection) for more information about managing selection persistence and its limitations.
@@ -166,7 +134,7 @@ It is not possible to use both selection and onClick actions simultaneously when
If you attempt to configure both selection (Single or Multi) and an onClick action with **Single click** trigger, the Gallery will display a design-time error:
-> "The item click action is ambiguous. Change 'On click trigger' to 'Double click' or set 'Selection' to 'None'."
+> The item click action is ambiguous. Change "On click trigger" to "Double click" or set "Selection" to "None".
#### Recommended Approach
@@ -176,21 +144,23 @@ For galleries that need both selection and click actions:
1. Configure your desired selection mode (**Single** or **Multi**).
1. Users can then select items with single clicks and trigger actions with double clicks.
-### Selection with Action Buttons in Header
+### Selection with Action Buttons in the Filters Placeholder
-Gallery selection works seamlessly with action buttons and other widgets placed in the gallery header. This pattern enables powerful bulk operation workflows.
+Gallery selection works seamlessly with action buttons and other widgets placed in the gallery's filters placeholder. This pattern enables powerful bulk operation workflows.
#### Selection Helper Integration
-Place a **Selection Helper** widget in the gallery header to provide bulk selection controls:
+Place a **Selection Helper** widget in the gallery's filters placeholder to provide bulk selection controls:
+
+* **Select All**: Select all items on the current page
+* **Clear Selection**: Deselect all items on the current page
+* **Selection Status**: Visual indicator of the selection state of the current page (all, some, or none selected)
-* **Select All**: Quickly select all visible items
-* **Clear Selection**: Remove all current selections
-* **Selection Status**: Visual indicator of current selection state (all, some, or none selected)
+The Selection Helper only acts on the items on the current page. When **Keep selection** is set to **Yes**, items selected on other pages stay selected.
#### Selection Count Display
-Enable the **Show selection count** property to display the number of selected items:
+When **Selection** is set to **Multi**, use the **Show selection count** property to set where the number of selected items is displayed (default: **Bottom**):
* **Top**: Shows count above the gallery items
* **Bottom**: Shows count below the gallery items
@@ -209,7 +179,7 @@ Use the **On selection change** action to trigger custom logic when selection ch
### Keep Selection
-If this setting is enabled, then selected items persist across page navigation, data refreshes, filtering, and sorting operations. By default, Keep selection is disabled and the selection is cleared when the items are not in the current set of datasource items. When enabled, selected items remain selected until manually cleared by the user or through a nanoflow action.
+If this setting is enabled, then selected items persist across page navigation, data refreshes, filtering, and sorting operations. This setting is only available when **Selection** is set to **Multi**. By default, Keep selection is disabled and the selection is cleared when the items are not in the current set of datasource items. When enabled, selected items remain selected until manually cleared by the user or through a nanoflow action.
{{% alert color="warning" %}}
Keep Selection cannot be used with non-persistent entities (NPEs) or view entities, as their IDs change on refresh.
@@ -221,16 +191,16 @@ In the Gallery widget it is possible to navigate and select items using the keyb
To improve user experience, it is possible to detect which item has keyboard focus. Visually, you can see which item has keyboard focus by spotting the thin blue border.
-You can also see when an item is selected: an item with a light gray background is selected.
+You can also see when an item is selected: an item with a light brand primary background is selected.
-For the keyboard navigation and keyboard selection to work, the user must open the **General** tab and then set the **Selection** property to one of the following:
+For the keyboard navigation and keyboard selection to work, you must open the **Behavior** tab and then set the **Selection** property to one of the following:
* **Single**: enables keyboard navigation with just single selection
* **Multi**: to enable keyboard navigation with multi-selection
### Keyboard Navigation
-Using the keyboard arrow keys (↑, ↓, ←, →) the user can navigate between the items displayed in the Gallery. Also, the user can use special keyboard keys like Home, End, Page up<, and Page down.
+Using the keyboard arrow keys (↑, ↓, ←, →) the user can navigate between the items displayed in the Gallery. Also, the user can use special keyboard keys like Home, End, Page up, and Page down.
With the keyboard, the user can press Tab and navigate between elements to reach the Gallery items.
diff --git a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/selection-helper.md b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/selection-helper.md
index 146429417f0..d44664a0afe 100644
--- a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/selection-helper.md
+++ b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/selection-helper.md
@@ -7,7 +7,11 @@ description: "Describes the configuration and usage of the Selection Helper widg
## Introduction
-The [Selection Helper](https://marketplace.mendix.com/link/component/116540) widget provides bulk-selection controls for data widgets, enabling users to quickly select all or clear all items when multi-selection is enabled. While primarily used for Gallery widgets, it also supports Data Grid 2 applications.
+The [Selection Helper](https://marketplace.mendix.com/link/component/116540) widget provides bulk-selection controls for data widgets, enabling users to quickly select or deselect all items on the current page when multi-selection is enabled. It works with both Gallery and Data Grid 2 widgets.
+
+{{% alert color="info" %}}
+The Selection Helper currently only selects and deselects items on the current page. When **Keep selection** is set to **Yes** on the data widget, items on other pages are not affected.
+{{% /alert %}}
Here is an example of a Selection Helper widget in a Gallery:
@@ -20,18 +24,18 @@ Before using the Selection Helper widget, ensure the following:
* **For Gallery** – Gallery widget is configured with Selection set to Multi.
* **For Data Grid 2** – Data Grid 2 is configured with Selection set to Multi.
-The Selection Helper must be placed inside the data widget's header content area. For specific guidance, see the subsections below.
+The Selection Helper must be placed inside the data widget's **Filters placeholder** area. For specific guidance, see the subsections below.
### For Gallery Widgets
1. Go to your Gallery widget.
-1. In the Header section, add the Selection Helper widget to the header content area.
+1. Add the Selection Helper widget to the **Filters placeholder** area.
1. Configure the Selection Helper properties as needed.
### For Data Grid 2 Widgets
1. Go to your Data Grid 2 widget.
-1. In the **Header** section, add the Selection Helper widget to the header content area.
+1. Add the Selection Helper widget to the **Filters placeholder** area.
1. Configure the Selection Helper properties as needed.
## Properties
@@ -45,11 +49,11 @@ Controls how the selection control appears to users:
#### Custom Style
-Available when `Style` is set to `Custom`. Defines custom widgets that display based on the current selection state:
+Available when **Style** is set to **Custom**. Defines custom widgets that display based on the current selection state:
-* **None Selected Widget** – Widget displayed when no items are currently selected. Usually contains **Select all** controls or empty state indicators.
-* **Some Selected Widget** – Widget displayed when some (but not all) items are selected. Often used to show **Select all** controls or partial selection indicators.
-* **All Selected Widget** – Widget displayed when all visible items in the grid are selected. Typically used to show **Clear selection** controls or indicators.
+* **None selected** – Widget displayed when no items are currently selected. Usually contains **Select all** controls or empty state indicators.
+* **Some selected** – Widget displayed when some (but not all) items are selected. Often used to show **Select all** controls or partial selection indicators.
+* **All selected** – Widget displayed when all items on the current page are selected. Typically used to show **Clear selection** controls or indicators.
Here is an example of a **Selection Helper** widget with a custom style configured:
@@ -61,9 +65,9 @@ The Selection Helper automatically manages three distinct selection states:
| State | Checkbox Appearance | Click Behavior | Use Case |
| ----- | -------------------- | ------------------------- | ----------------------------------------- |
-| None | Unchecked | Selects all visible items | Starting state, no selections made |
-| Some | Indeterminate (dash) | Selects all visible items | Partial selection, complete the selection |
-| All | Checked | Clears all selections | Full selection, allow deselection |
+| None | Unchecked | Selects all items on the current page | Starting state, no selections made |
+| Some | Indeterminate (dash) | Selects all items on the current page | Partial selection, complete the selection |
+| All | Checked | Deselects all items on the current page | Full selection, allow deselection |
### Check Box Caption
@@ -92,11 +96,11 @@ The **Selection Helper** works with both **Gallery** and **Data Grid 2** selecti
### Gallery Bulk Selection
-Place a Selection Helper with default checkbox style in the Gallery header for simple select-all functionality in grid or list layouts.
+Place a Selection Helper with default checkbox style in the Gallery's filters placeholder for simple select-all functionality in grid or list layouts.
### Data Grid 2 Bulk Selection
-Use the Selection Helper in Data Grid 2 headers for tabular data bulk operations.
+Use the Selection Helper in the Data Grid 2 filters placeholder for tabular data bulk operations.
### Custom Bulk Operations Interface
diff --git a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/tree-node.md b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/tree-node.md
index 81cdb5adbf0..d55df09d5ef 100644
--- a/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/tree-node.md
+++ b/content/en/docs/marketplace/platform-supported-content/modules/data-widgets/tree-node.md
@@ -9,7 +9,7 @@ description: "Describes the purpose, features, and configurations of the Tree No
The [Tree Node](https://marketplace.mendix.com/link/component/116540) widget displays a level of tree nodes.
-Mendix recommends using multiple Tree Node widgets in a nested matter. In this way, you can map out your entire domain model in the form of a tree view. If you only need one tree node, then the [Accordion](/appstore/widgets/accordion/) widget is a better alternative.
+Mendix recommends using multiple Tree Node widgets in a nested structure. In this way, you can map out your entire domain model in the form of a tree view. If you only need one tree node, then the [Accordion](/appstore/widgets/accordion/) widget is a better alternative.
## Features
@@ -18,14 +18,14 @@ Mendix recommends using multiple Tree Node widgets in a nested matter. In this w
* Allows you to nest tree nodes to map out your entire domain model into a tree view
* Delivers out-of-the-box performance and network optimizations through lazy loading and caching of tree nodes
* Offers additional styling customizations through Atlas UI
-* Displays an infinite amount of tree nodes by using self-reference entity (available from data widgets version 3.11.0 and above)
+* Displays an infinite amount of tree nodes by using self-reference entity (available from Data Widgets version 3.11.0 and above)
-### Child Detection Mode
+### Child Detection Mode {#child-detection-mode}
-Starting from data widgets version 3.11.0, Tree Node offers 2 ways of rendering child nodes:
+Starting from Data Widgets version 3.11.0, Tree Node offers two ways of rendering child nodes:
-* **Manual child rendering** – This is the current available configuration. The end-user needs to put tree node widget (child) inside another treenode widget (parent) and set data source accordingly.
-* **Infinite tree node** – This is a recursive mode whereas the children have self reference to the same entity as the parent. In this mode, the widget will render child automatically. Data with empty parents will be automatically used as root.
+* **Manual child rendering** – You place a Tree Node widget (child) inside another Tree Node widget (parent) and set its data source accordingly. The widget uses this mode when **Parent association** is not set.
+* **Infinite tree node** – A recursive mode in which each child refers to its parent through the self-referencing association selected in **Parent association**. The widget uses this mode when **Parent association** is set. In this mode, the widget renders child nodes automatically. Objects with an empty parent are used as root nodes.
{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/treenode/infinite_treenode.png" alt="self reference entity for treenode" class="no-border" >}}
@@ -55,46 +55,52 @@ Drag the Tree Node widget onto the page and use the configuration properties des
### General Tab {#general}
-* **Data source** – the data source of the widget, which can also be optionally used as the data source for the header and content of the widget
+* **Data source** – This sets the data source of the widget, which can also be optionally used as the data source for the header and content of the widget:
* Required
-* **Parent association** – the association used to select a parent. If set, tree node will automatically use infinite tree node child detection modes.
-* **Header type** – defines the type of the header:
+* **Parent association** – This sets the association used to select a parent. If set, the widget uses [Infinite tree node](#child-detection-mode) mode.
+* **Header type** – This defines the type of the header:
* Default: **Text**
* When set to **Text**, you can configure the **Header caption** property
* When set to **Custom**, a new region becomes available where you can configure the header through other widgets
{{% alert color="info" %}}The **Data source** of the widget can also be used as a data source for the header and the content, regardless of the **Header type**.{{% /alert %}}
-* **Header caption** – you can enter the header caption in the field or click **Edit** to configure a text template in the **Edit Caption** dialog box
+* **Header caption** – This sets the text template used as the header caption:
* Configurable when **Header type** is set to **Text**
-* **Has children** – indicates if the current level of tree nodes has children tree nodes
- * Default: **Yes**
- * When set to **Yes**, a new region becomes available at the bottom of the widget where you can add another widget as child nodes
+* **Open node when** – This defines which part of the node opens or closes the node when clicked:
+ * Configurable when **Header type** is set to **Custom**; default: **Header is clicked**
+ * When set to **Header is clicked**, the whole header is clickable
+ * When set to **Icon is clicked**, only the icon opens or closes the node; in this case, **Show icon** cannot be set to **No**
+* **Has children** – This is a Boolean expression that indicates whether a tree node has child nodes or is an end node:
+ * Configurable when **Parent association** is not set
+ * When configured, a new region becomes available at the bottom of the widget where you can add another widget as child nodes
- {{% alert color="info" %}}The **Has children** configuration will be set automatically on infinite tree node child detection mode.{{% /alert %}}
-* **Start expanded** – determines whether the content of the current level of tree nodes starts expanded or collapsed
- * Configurable when **Has children** is set to **Yes**; default: **No**
+ {{% alert color="info" %}}In **Infinite tree node** mode, **Has children** is hidden and the widget detects child nodes automatically.{{% /alert %}}
+* **Start expanded** – This determines whether the content of the current level of tree nodes starts expanded or collapsed:
+ * Configurable when **Has children** is configured or **Parent association** is set; default: **No**
- {{% alert color="info" %}}On infinite tree node child detection modes, we recommend setting **Has children** to **No** for large data sets. Otherwise, the setting will force the tree node to expand directly, loading all data at once.{{% /alert %}}
+ {{% alert color="info" %}}In **Infinite tree node** mode, Mendix recommends setting **Start expanded** to **No** for large data sets. When **Start expanded** is set to **Yes**, the widget expands all tree nodes directly and loads all data at once.{{% /alert %}}
-* **Animate** – defines whether the content is animated when a tree node expands and collapses
+* **Animate** – This defines whether the content is animated when a tree node expands and collapses:
* Default: **Yes**
### Visualization Tab {#visualization}
The **Visualization** tab includes the following properties:
-* **Show icon** – defines the location of the icon relative to the header
+* **Show icon** – This defines the location of the icon relative to the header:
* Default: **Left**
* When set to **Left**, the icon is placed to the left to the header
* When set to **Right**, the icon is placed to the right to the header
* When set to **No**, the header has no icon
-* **Expanded icon** – defines the custom icon used to indicate that the tree node is expanded
+* **Expanded icon** – This defines the custom icon used to indicate that the tree node is expanded:
* Configurable when **Show icon** is set to either **Left** or **Right**
-* **Collapsed icon** – defines the custom icon used to indicate that the tree node is collapsed
+* **Collapsed icon** – This defines the custom icon used to indicate that the tree node is collapsed:
* Configurable when **Show icon** is set to either **Left** or **Right**
-* **Animate icon**– defines whether the icon is animated when you expand or collapse a tree node
+* **Animate icon** – This defines whether the icon is animated when you expand or collapse a tree node:
* Default: **Yes**
+* **No data message** – This sets the text shown when there are no items to display:
+ * Configurable when **Parent association** is set; default: **No data available**
### Styling
@@ -102,7 +108,6 @@ The Tree Node widget has default styles and works out of the box without Atlas U
These are the design properties shipped with Atlas UI for this widget:
-* **Borders** – changes the border appearance
+* **Borders** – This changes the border appearance:
* **Horizontal**, **Both**, **None** (default)
-* **Hover** – highlights an item when hovering over it
- * **Yes**, **No** (default)
+* **Hover** – This is a toggle that highlights an item when hovering over it; only useful when the item is clickable.
diff --git a/static/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/filter-region.png b/static/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/filter-region.png
deleted file mode 100644
index 7a8e4ec82b2..00000000000
Binary files a/static/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/filter-region.png and /dev/null differ
diff --git a/static/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/filtering.gif b/static/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/filtering.gif
deleted file mode 100644
index 948e65e4589..00000000000
Binary files a/static/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/filtering.gif and /dev/null differ
diff --git a/static/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/filtering.png b/static/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/filtering.png
deleted file mode 100644
index 985726d32b3..00000000000
Binary files a/static/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/filtering.png and /dev/null differ
diff --git a/static/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/sorting.gif b/static/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/sorting.gif
deleted file mode 100644
index 38c28f017e7..00000000000
Binary files a/static/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/sorting.gif and /dev/null differ
diff --git a/static/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/sorting.png b/static/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/sorting.png
deleted file mode 100644
index 9518ebd8d14..00000000000
Binary files a/static/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/sorting.png and /dev/null differ