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..e3a47e0c094 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
@@ -7,17 +7,20 @@ description: "Describes the configuration and usage of the Data Widgets module,
## Introduction
-[Data Widgets](https://marketplace.mendix.com/link/component/116540) is a module containing widgets that show data in a specific structure.
+[Data Widgets](https://marketplace.mendix.com/link/component/116540) is a module containing widgets that show data in a specific structure. It requires Studio Pro 10.24.0 or above.
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)
+* [Dropdown 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..f1fca59dc4d 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)
+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
+
+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
+
+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
+
+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
+
+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
+
+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
+
+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
+
+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
+
+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.
+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
+
+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.
+
+##### Pagination
+
+Defines the type of pagination. The following options are available:
+
+* **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
+
+##### Custom Pagination
+
+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**.
+
+These properties are only shown when **Pagination** is set to **Paging buttons**.
+
+##### Show Paging Buttons
+
+Controls the visibility of navigation buttons. The following options are available:
+
+* **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
+
+This property is only shown when **Pagination** is set to **Paging buttons** and **Custom pagination** is set to **No**.
+
+##### Show Number of Rows
+
+When set to **Yes**, the total number of rows is displayed in the pagination area, providing users with context about the dataset size. The default value is **No**.
+
+This property is only shown when **Pagination** is set to **Virtual scrolling** or **Load more**.
+
+##### Position of Pagination
+
+Defines where the pagination is displayed. The following options are available:
-Defines the type of pagination. By default, the data grid groups rows into pages, and employs buttons to navigate between pages.
+* **Below grid** (default)
+* **Above grid**
+* **Both**
-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.
+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.
-#### Show Paging Buttons
+##### Load More Caption
-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.
+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**.
-#### Show Number of Rows
+##### Page Size Attribute
-This property displays the total number of rows in the pagination area, providing users with context about the dataset size.
+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**.
-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.
+##### Page Attribute
-#### Empty List Message
+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.
-Sets a custom message to be displayed when there is no data in the data source, or the filter result is empty.
+##### Total Count
-#### Dynamic Row Class
+An Integer attribute in which the data grid stores the current total number of rows.
+
+##### Loaded Rows
+
+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**.
+
+#### Appearance
+
+##### Empty List Message
+
+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:
+
+* **None** (default): no message is displayed
+* **Custom**: displays the content of the **Empty placeholder** area
+
+##### Empty Placeholder
+
+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**.
+
+##### Dynamic Row Class
An expression that returns the CSS class for the row. The data source entity is available as `$currentObject` within the scope of the expression.
-### Events Tab
+#### Advanced
-#### On Click Trigger
+##### Custom Row Key
-This property determines how the click action is triggered.
+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.
-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.
+### Personalization Tab
-#### On Click Action
+#### Column Capabilities
-This property sets the action to be performed when the row is clicked.
+##### Sorting
-{{% alert color="info" %}}
-The setting for actions and action triggers is related to the selection method and can sometimes be ambiguous.
+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**.
-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 %}}
+##### Resizing
-#### On Selection Change
+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**.
-This property sets the action to be performed when the row is selected or unselected.
+##### Reordering
-#### Filters {#filters-placeholder}
+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**.
-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.
+##### Hiding
-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.
+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**.
-### Column Capabilities Tab
+#### Configuration
-#### Sorting
+##### Store Configuration In
-This flag controls column sorting for the entire data grid. If set to **No**, then sorting is disabled for any column.
+Sets where the personalized configuration of the data grid is stored. The following options are available:
-#### Resizing
+* **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.
-This flag controls column resizing for the entire data grid. If set to **No**, then resizing is disabled for any column.
+##### Attribute
-#### Reordering
+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.
-This flag controls column reordering for the entire data grid. If set to **No**, then reordering is disabled for any column.
+This property is only shown when **Store configuration in** is set to **Attribute**.
-#### Hiding
+##### Store Filters
-This flag controls column hiding for the entire data grid. If set to **No**, then hiding is disabled for any column.
+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.
-### Configuration Tab
+##### On Change
-#### Store Filters in Personalization
+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**.
-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.
+### Texts Tab
-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.
+#### Aria Labels
-#### Attribute
+##### Filter Section
-This property sets the entity attribute that is used to store custom visual settings for the data grid.
+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.
-#### On Change
+##### Export Progress
-This property sets the action to be performed when the **Attribute** value is changed.
+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".
-### Grid Wide Filtering
+##### Cancel Data Export
-{{% 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 %}}
+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
-### Aria Labels
+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".
-#### Filter Section
+##### Select All Label
-Defines a string value that labels the header area of the data grid. Used by assistive technologies and screen readers.
+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".
-#### Export Progress
+##### Single Selection Column Label
-Defines a string value that labels the export dialog of the data grid. Used by assistive technologies and screen readers.
+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**.
-#### Cancel Data Export
+##### Selecting All Label
-Defines a string value that labels the cancel export button of the export dialog. Used by assistive technologies and screen readers.
+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...".
-#### Select Row
+##### Cancel Selection Label
-Defines a string value that labels the checkbox of the row when the selection is enabled. Used by assistive technologies and screen readers.
+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".
-#### Select All Rows
+#### Captions
-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.
+##### Row Count Singular
-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.
+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
+
+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
+
+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
+
+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
+
+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
+
+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.
+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
+
+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
+
+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
+
+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
+
+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
+
+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.
+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.
+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
+
+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**.
+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.
+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.
+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.
+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
+
+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)
+
+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.
+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.
+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..3430ee189df 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
@@ -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 dropdown 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 (works only when placed in grid columns)
+* **Custom**: you specify the data source to filter and select the attributes in **Attributes** (or the attribute in **Attribute** for the drop-down filter), for more flexible filtering scenarios
+
+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
@@ -479,29 +487,16 @@ In this section you can select an action to be executed **On change** by the fil
### 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`.
-
{{% 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/)
+* [Dropdown 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. This will allow you 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,10 +576,10 @@ 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
@@ -609,9 +589,9 @@ When the button is placed in a grid header, the assigned action can receive the
When a button placed in header 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.
@@ -670,7 +650,7 @@ 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.
@@ -681,10 +661,10 @@ Place widget inside Gallery header, Data Grid 2 header, or Data Grid 2 column.
> "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..61ad97f7ef7 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
+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
+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
+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
+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
+
+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
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
-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.
+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.
-### Configurations
+#### Configurations
-#### Saved Attribute
+##### Saved Attribute
-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**.
+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**.
-#### Saved Start Date Attribute
+##### Saved Start Date Attribute
-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.
+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**.
-#### Saved End Date Attribute
+##### Saved End Date Attribute
-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.
+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**.
-### 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 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
+### Accessibility Tab
+
+#### 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**.
-#### 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.
-#### 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.
+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..1cfb76ba2e8 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
@@ -6,7 +6,7 @@ description: "This document describes the properties of the Dropdown Filter widg
## 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 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 associations through a dropdown selection interface 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:
+Determines the type of filtering the dropdown 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
+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.
+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:
+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 dropdown 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:
+Allows manual specification of dropdown 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**.
+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.
+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 dropdown filter displays these objects as selectable options. This property is only available when **Filter by** is set to **Association**.
+
+##### Caption Source
+
+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.
+Specifies the text that is displayed for each option in the dropdown 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
+
+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.
+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 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.
+Sets the initial value that is selected in the dropdown 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**, adds a search input to the dropdown allowing users to quickly find options by typing. This is especially useful for dropdowns 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.
+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.
+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**, 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 dropdown is always clearable.
##### Show Selected Items As
-Controls how selected options are displayed when multiselect is enabled:
+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:
+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
+#### Configurations
-#### Saved Attribute
+##### Saved Attribute
-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.
+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
+#### Events
-#### On Change
+##### On Change
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.
-### Accessibility
+### Advanced Tab
+
+#### Accessibility
-#### Input Caption
+##### Input Caption
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.
+
+#### Texts
+
+##### Empty Selection Caption
+
+Defines the text shown when no options are selected, for example, "Select color" or "No options are selected". The default value is "Select".
+
+##### Filter Input Placeholder
+
+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..613dbb3e647 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,32 @@ 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
+**Filter attributes** 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 {#data-source-to-filter}
-#### Attributes
+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 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:
+##### Attributes
+
+**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.
+**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 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:
+**Default filter** 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 +50,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
+
+**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.
-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
+**Adjustable by user** 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.
-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)
+**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 500 ms 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 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
+**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. 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
+**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.
-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}
-### 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.
+**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 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.
+**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 (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..bd57cb6e97c 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
+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
+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
+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
+
+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
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
-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**, 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. 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
-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 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.
-### 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
+
+#### 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 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..c7148cac780 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**.
+We provide a mechanism that automatically applies a different number of columns based on the device being used. In the Gallery widget, 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 always in English and cannot be translated.
{{% /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
@@ -66,7 +55,7 @@ When this option is defined as custom it will show a composable region. Here you
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.
-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:
+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:
{{< 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,41 @@ 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:
-
-{{< figure src="/attachments/appstore/platform-supported-content/modules/data-widgets/gallery/filtering.png" alt="Example of filtering configuration" width="300" class="no-border" >}}
-
-An example of text filter being used in the composable region combined with a drop-down sort:
+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/filter-region.png" alt="Example of filtering composable region" 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:
-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/)
+* [Dropdown 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 +136,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
@@ -178,19 +148,19 @@ For galleries that need both selection and click actions:
### Selection with Action Buttons in Header
-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**: Quickly select all visible items
+* **Select All**: Select all items on the current page
* **Clear Selection**: Remove all current selections
* **Selection Status**: Visual indicator of current selection state (all, some, or none 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..a933978bd5e 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,7 @@ 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 all or clear all items when multi-selection is enabled. It works with both Gallery and Data Grid 2 widgets.
Here is an example of a Selection Helper widget in a Gallery:
@@ -20,18 +20,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 +45,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 +61,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
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..31f34819b37 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 manner. 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
@@ -24,8 +24,8 @@ Mendix recommends using multiple Tree Node widgets in a nested matter. In this w
Starting from data widgets version 3.11.0, Tree Node offers 2 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 the children have a self-referencing association to the same entity as the parent. 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" >}}
@@ -65,17 +65,21 @@ Drag the Tree Node widget onto the page and use the configuration properties des
{{% 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** – 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** – 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** – 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**
+ * 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 child detection 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
* Default: **Yes**
@@ -95,6 +99,8 @@ The **Visualization** tab includes the following properties:
* 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
* Default: **Yes**
+* **No data message** – the text shown when there are no items to display
+ * Configurable when **Parent association** is set; default: **No data available**
### Styling
@@ -104,5 +110,4 @@ These are the design properties shipped with Atlas UI for this widget:
* **Borders** – changes the border appearance
* **Horizontal**, **Both**, **None** (default)
-* **Hover** – highlights an item when hovering over it
- * **Yes**, **No** (default)
+* **Hover** – 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.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