Data Table

A full-featured data table with sorting, filtering, pagination, and row selection.

Default

A data table with sortable columns, filtering, and pagination.

[{"invoice":"INV001","status":"Paid","method":"Credit Card","amount":250.0},{"invoice":"INV002","status":"Pending","method":"PayPal","amount":150.0},{"invoice":"INV003","status":"Unpaid","method":"Bank Transfer","amount":350.0},{"invoice":"INV004","status":"Paid","method":"Credit Card","amount":450.0},{"invoice":"INV005","status":"Paid","method":"PayPal","amount":550.0},{"invoice":"INV006","status":"Pending","method":"Bank Transfer","amount":200.0},{"invoice":"INV007","status":"Unpaid","method":"Credit Card","amount":125.0},{"invoice":"INV008","status":"Paid","method":"PayPal","amount":675.0},{"invoice":"INV009","status":"Pending","method":"Bank Transfer","amount":310.0},{"invoice":"INV010","status":"Paid","method":"Credit Card","amount":890.0},{"invoice":"INV011","status":"Unpaid","method":"PayPal","amount":175.0},{"invoice":"INV012","status":"Paid","method":"Bank Transfer","amount":425.0}][{"key":"invoice","header":"Invoice","sortable":true,"hideable":true,"align":"left"},{"key":"status","header":"Status","sortable":true,"hideable":true,"align":"left"},{"key":"method","header":"Method","sortable":true,"hideable":true,"align":"left"},{"key":"amount","header":"Amount","sortable":true,"hideable":true,"align":"right"}]
INV001PaidCredit Card250.0
INV002PendingPayPal150.0
INV003UnpaidBank Transfer350.0
INV004PaidCredit Card450.0
INV005PaidPayPal550.0
12 row(s) total.
Page 1 of 3

With Row Selection

Enable row selection with checkboxes.

[{"invoice":"INV001","status":"Paid","method":"Credit Card","amount":250.0},{"invoice":"INV002","status":"Pending","method":"PayPal","amount":150.0},{"invoice":"INV003","status":"Unpaid","method":"Bank Transfer","amount":350.0},{"invoice":"INV004","status":"Paid","method":"Credit Card","amount":450.0},{"invoice":"INV005","status":"Paid","method":"PayPal","amount":550.0},{"invoice":"INV006","status":"Pending","method":"Bank Transfer","amount":200.0},{"invoice":"INV007","status":"Unpaid","method":"Credit Card","amount":125.0},{"invoice":"INV008","status":"Paid","method":"PayPal","amount":675.0},{"invoice":"INV009","status":"Pending","method":"Bank Transfer","amount":310.0},{"invoice":"INV010","status":"Paid","method":"Credit Card","amount":890.0},{"invoice":"INV011","status":"Unpaid","method":"PayPal","amount":175.0},{"invoice":"INV012","status":"Paid","method":"Bank Transfer","amount":425.0}][{"key":"invoice","header":"Invoice","sortable":true,"hideable":true,"align":"left"},{"key":"status","header":"Status","sortable":true,"hideable":true,"align":"left"},{"key":"method","header":"Method","sortable":true,"hideable":true,"align":"left"},{"key":"amount","header":"Amount","sortable":true,"hideable":true,"align":"right"}]
INV001PaidCredit Card250.0
INV002PendingPayPal150.0
INV003UnpaidBank Transfer350.0
INV004PaidCredit Card450.0
INV005PaidPayPal550.0
0 of 12 row(s) selected.
Page 1 of 3

Column Visibility

Toggle column visibility with the Columns dropdown.

[{"invoice":"INV001","status":"Paid","method":"Credit Card","amount":250.0},{"invoice":"INV002","status":"Pending","method":"PayPal","amount":150.0},{"invoice":"INV003","status":"Unpaid","method":"Bank Transfer","amount":350.0},{"invoice":"INV004","status":"Paid","method":"Credit Card","amount":450.0},{"invoice":"INV005","status":"Paid","method":"PayPal","amount":550.0},{"invoice":"INV006","status":"Pending","method":"Bank Transfer","amount":200.0},{"invoice":"INV007","status":"Unpaid","method":"Credit Card","amount":125.0},{"invoice":"INV008","status":"Paid","method":"PayPal","amount":675.0},{"invoice":"INV009","status":"Pending","method":"Bank Transfer","amount":310.0},{"invoice":"INV010","status":"Paid","method":"Credit Card","amount":890.0},{"invoice":"INV011","status":"Unpaid","method":"PayPal","amount":175.0},{"invoice":"INV012","status":"Paid","method":"Bank Transfer","amount":425.0}][{"key":"invoice","header":"Invoice","sortable":true,"hideable":true,"align":"left"},{"key":"status","header":"Status","sortable":true,"hideable":true,"align":"left"},{"key":"method","header":"Method","sortable":true,"hideable":true,"align":"left"},{"key":"amount","header":"Amount","sortable":true,"hideable":true,"align":"right"}]
INV001PaidCredit Card250.0
INV002PendingPayPal150.0
INV003UnpaidBank Transfer350.0
INV004PaidCredit Card450.0
INV005PaidPayPal550.0
12 row(s) total.
Page 1 of 3

All Features

Sorting, filtering, pagination, row selection, and column visibility.

[{"invoice":"INV001","status":"Paid","method":"Credit Card","amount":250.0},{"invoice":"INV002","status":"Pending","method":"PayPal","amount":150.0},{"invoice":"INV003","status":"Unpaid","method":"Bank Transfer","amount":350.0},{"invoice":"INV004","status":"Paid","method":"Credit Card","amount":450.0},{"invoice":"INV005","status":"Paid","method":"PayPal","amount":550.0},{"invoice":"INV006","status":"Pending","method":"Bank Transfer","amount":200.0},{"invoice":"INV007","status":"Unpaid","method":"Credit Card","amount":125.0},{"invoice":"INV008","status":"Paid","method":"PayPal","amount":675.0},{"invoice":"INV009","status":"Pending","method":"Bank Transfer","amount":310.0},{"invoice":"INV010","status":"Paid","method":"Credit Card","amount":890.0},{"invoice":"INV011","status":"Unpaid","method":"PayPal","amount":175.0},{"invoice":"INV012","status":"Paid","method":"Bank Transfer","amount":425.0}][{"key":"invoice","header":"Invoice","sortable":true,"hideable":true,"align":"left"},{"key":"status","header":"Status","sortable":true,"hideable":true,"align":"left"},{"key":"method","header":"Method","sortable":true,"hideable":true,"align":"left"},{"key":"amount","header":"Amount","sortable":true,"hideable":true,"align":"right"}]
INV001PaidCredit Card250.0
INV002PendingPayPal150.0
INV003UnpaidBank Transfer350.0
INV004PaidCredit Card450.0
INV005PaidPayPal550.0
0 of 12 row(s) selected.
Page 1 of 3

Usage

julia
using Suite

# Define your data
data = [
    (name="Alice", email="alice@example.com", role="Admin"),
    (name="Bob", email="bob@example.com", role="User"),
    (name="Charlie", email="charlie@example.com", role="Editor"),
]

# Define columns
columns = [
    DataTableColumn("name", "Name"),
    DataTableColumn("email", "Email"),
    DataTableColumn("role", "Role"),
]

# Render the table
DataTable(data, columns,
    paginated=true,
    page_size=10,
    selectable=true,
    column_visibility=true,
    filter_placeholder="Search users...",
)

Column Definition

Columns are defined using DataTableColumn. Each column specifies a data key, header text, and optional configuration.

julia
# Basic column
DataTableColumn("name", "Name")

# Right-aligned column
DataTableColumn("amount", "Amount", align="right")

# Non-sortable column
DataTableColumn("actions", "Actions", sortable=false, hideable=false)

# Custom cell renderer
DataTableColumn("status", "Status",
    cell=(val, row) -> Badge(val, variant=val == "Active" ? "default" : "secondary"))

Features

FeatureDescription
SortingClick column headers to sort ascending/descending/none
FilteringType in the filter input to search across all columns
PaginationNavigate pages with Previous/Next buttons
Row SelectionSelect individual rows or all rows on current page
Column VisibilityToggle column display via the Columns dropdown

API Reference

DataTable

PropTypeDefaultDescription
dataVectorrequiredData rows (Vector of NamedTuples or Dicts)
columnsVector{DataTableColumn}requiredColumn definitions
filterableBooltrueShow filter input
filter_placeholderString"Filter..."Filter input placeholder text
filter_columnsVector{String}[] (all)Columns to filter on
sortableBooltrueEnable column sorting
paginatedBooltrueEnable pagination
page_sizeInt10Rows per page
selectableBoolfalseShow row selection checkboxes
column_visibilityBoolfalseShow column visibility toggle
captionString""Table caption
classString""Additional CSS classes
themeSymbol:defaultTheme name

DataTableColumn

PropTypeDefaultDescription
keyStringrequiredData field key (accessor)
headerStringrequiredDisplay header text
sortableBooltrueWhether this column is sortable
hideableBooltrueWhether this column can be hidden
cellFunction|NothingnothingCustom cell renderer (val, row) -> VNode
header_classString""Additional CSS classes for header cell
cell_classString""Additional CSS classes for data cells
alignString"left"Text alignment: left, center, right