Multiple selection table
Displays a list of entities that match the selected alias and optional filter. Provides the ability for full-text search and pagination, except for columns with post-processing or cell content functions. Supports multiple selection actions — selecting one or more rows reveals a dedicated toolbar with custom actions that operate on the whole selection at once. Highly customizable using widget styles, data source keys, and widget actions.
Who it’s for
Admins and operators managing many similar entities at once ask “how do I apply one action to a whole batch of devices or assets, instead of clicking into each one?” They’re reassigning a group of devices to a customer, bulk-deleting stale entities, or pushing the same state change across a dozen rows, and repeating a single-entity action row by row doesn’t scale.
What it does
An operator ticks three devices in the table. A toolbar appears above it with a “Reassign to customer” button, wired once as a Multiple selection action. Clicking it hands that action the three devices in one call, both as lightweight IDs for a bulk API request and as full rows with every displayed column, instead of the action running three separate times.
- Multi-row selection with a dedicated toolbar — selecting one or more rows reveals a toolbar exposing every action wired to Multiple selection action, so it runs once against the whole selection
- The full selection in one payload — passes
entityIds(id and entityType only, for bulk API calls) andentities(the full row for each selected entity, including every displayed data key) throughadditionalParams - Server-side search and pagination, the same as the built-in Entities Table widget, fetching only the entities a page actually needs
- Per-row and per-cell actions, plus row click and row double-click, alongside the multi-selection toolbar
- Optional Entity name, label, and type columns, without adding them as data keys
- Extends the built-in Entities Table widget; the multi-selection toolbar and its payload are what’s new, and everything else works the same way
How to set up
Data keys
| Key | Role | Type | Description |
|---|---|---|---|
| Data keys (any number, user-configured) | One column per key | Attribute, Timeseries, or Entity field | Column header uses the key’s own Label; values are formatted with that key’s Units and Decimals. With no keys configured, the table shows a single Display name column |
Columns
| Setting | Default | Effect |
|---|---|---|
| Display entity name | Off | Adds an Entity name column before your own data key columns |
| Display entity label | Off | Adds an Entity label column |
| Display entity type | Off | Adds an Entity type column |
Search & pagination
| Setting | Default | Effect |
|---|---|---|
| Enable search | On | Shows a full-text search box. It matches each key’s stored value — not the rendered text of a column built from a post-processing or cell content function, since that text is computed after the search runs |
| Display pagination | On | Shows the pager and fetches entities a page at a time, instead of loading every match at once |
| Default page size | 10 | Rows per page when the table first loads |
| Default sort order | Entity name, ascending | Column and direction the table opens sorted by. Click any column header to change it |
Actions
| Setting | Default | Effect |
|---|---|---|
| Multiple selection action | None configured | Add one under the widget’s Actions tab, source Multiple selection action. Each one you add renders as its own button in the toolbar shown whenever rows are selected |
When a Multiple selection action runs, ThingsBoard passes the selection
into it through additionalParams:
{ "entityIds": [ { "id": "13814000-1dd2-11b2-8080-808080808080", "entityType": "DEVICE" } ], "entities": [ { "id": { "id": "13814000-1dd2-11b2-8080-808080808080", "entityType": "DEVICE" }, "entityName": "Simulated", "entityLabel": "Simulated", "entityType": "DEVICE", "Sin": -601, "Cos": -799, "Random": -94.18 } ]}entityIds is the lightweight list, useful for a bulk REST call.
entities carries the full row, including every configured data key, for
actions that need the displayed values rather than another lookup.
How to customize
- To keep the header visible while scrolling — turn on Sticky header.
- To keep the row-action column visible while scrolling sideways — turn on Sticky action column.
- To stop the table’s width from shifting row to row — turn on Reserve space for hidden action, so a row without a visible action still reserves that column’s width.
- To color rows based on their own data — turn on Use row style function and write the function.
- To rename the “Entities” label used around the widget — edit Entities title.
Tips
- Point a Multiple selection action at a REST call or a dashboard state update, and the whole selection is handled in one action instead of repeating a single-entity action row by row.
- Add more than one Multiple selection action — each renders as its own toolbar button, so you can offer several bulk operations at once.
- Combine a Multiple selection action for batch work with a per-row Action cell button for the operations that only ever apply to one entity at a time.
Share Your Widget with the Community
Built a custom widget? Export it as a JSON from ThingsBoard and publish it to the IoT Hub through a simple 4-step wizard (Upload, Listing, Readme, Review & Submit). Share it with thousands of ThingsBoard developers worldwide and get featured in the catalog.