LowCodeStacks™
Sign in

NewPower Apps · canvas componentData display✓ Tested in StudioMIT License

Data table

Your rows as a table, cards or a list, with coloured status pills, segmented progress, sortable headers, checkboxes with bulk actions, a row menu, and loading and empty states. Select a row to open it. Built on a gallery, so it looks the way you want.

Name in Studio
lcsDataTable
Version
0.2.0
Properties
18 inputs · 6 outputs · 5 events · 1 action
Sign in to copy

Free with an account

1 rating · worked in 1 app

Sign in to copy

Variations

As it is when you paste it, with every input at its default.

  • #1001Avery BrooksIn progress2/4Mar 3High
  • #1002Jordan LeeCompleted5/5Mar 5Medium
  • #1003Priya NairOn hold1/3Mar 9Low
  • #1004Mateo AlvarezNot started0/4Mar 12High
  • #1005Chloé MartinIn progress3/5Mar 14Medium
  • #1006Kenji WatanabeCompleted4/4Mar 16Low
  • #1007Amara OkaforIn progress1/4Mar 18High
  • #1008Liam WalshNot started0/3Mar 20Medium
  • #1009Noah FischerOn hold2/5Mar 22Low
  • #1010Sam RiveraIn progress4/5Mar 24Medium

Formulas on this screen

Set the same ones in Studio to try it the same way; there, each Notify shows its event in a banner, which this preview leaves out so nothing covers the component. The instance names are the ones Studio gives the first copy on a screen.

  • Screen1.OnVisible = ClearCollect(colOrders, {OrderNumber: 1001, Customer: "Avery Brooks", Status: "In progress", StepsDone: 2, StepsTotal: 4, DueDate: Date(2026, 3, 3), Priority: "High"}, {OrderNumber: 1002, Customer: "Jordan Lee", Status: "Completed", StepsDone: 5, StepsTotal: 5, DueDate: Date(2026, 3, 5), Priority: "Medium"}, {OrderNumber: 1003, Customer: "Priya Nair", Status: "On hold", StepsDone: 1, StepsTotal: 3, DueDate: Date(2026, 3, 9), Priority: "Low"}, {OrderNumber: 1004, Customer: "Mateo Alvarez", Status: "Not started", StepsDone: 0, StepsTotal: 4, DueDate: Date(2026, 3, 12), Priority: "High"}, {OrderNumber: 1005, Customer: "Chloé Martin", Status: "In progress", StepsDone: 3, StepsTotal: 5, DueDate: Date(2026, 3, 14), Priority: "Medium"}, {OrderNumber: 1006, Customer: "Kenji Watanabe", Status: "Completed", StepsDone: 4, StepsTotal: 4, DueDate: Date(2026, 3, 16), Priority: "Low"}, {OrderNumber: 1007, Customer: "Amara Okafor", Status: "In progress", StepsDone: 1, StepsTotal: 4, DueDate: Date(2026, 3, 18), Priority: "High"}, {OrderNumber: 1008, Customer: "Liam Walsh", Status: "Not started", StepsDone: 0, StepsTotal: 3, DueDate: Date(2026, 3, 20), Priority: "Medium"}, {OrderNumber: 1009, Customer: "Noah Fischer", Status: "On hold", StepsDone: 2, StepsTotal: 5, DueDate: Date(2026, 3, 22), Priority: "Low"}, {OrderNumber: 1010, Customer: "Sam Rivera", Status: "In progress", StepsDone: 4, StepsTotal: 5, DueDate: Date(2026, 3, 24), Priority: "Medium"})

  • lcsDataTable_1.Rows = ForAll(Switch(lcsDataTable_1.SortColumn, 2, SortByColumns(colOrders, Customer, If(lcsDataTable_1.SortDescending, SortOrder.Descending, SortOrder.Ascending)), 5, SortByColumns(colOrders, DueDate, If(lcsDataTable_1.SortDescending, SortOrder.Descending, SortOrder.Ascending)), colOrders), {Id: Text(OrderNumber), C1: "#" & OrderNumber, C2: Customer, C3: Status, C4: StepsDone & "/" & StepsTotal, C5: Text(DueDate, "mmm d"), C6: Priority})

  • lcsDataTable_1.OnRowSelect = Notify("Open order #" & RowId)

  • lcsDataTable_1.OnRowAction = Notify(Action & " order #" & RowId)

A web replica that behaves as the component does in Power Apps. In Studio it uses Microsoft's controls, which can look slightly different.

Add it in five steps

  1. In Power Apps Studio, open Settings > Updates and check that Modern controls and themes and Enhanced component properties are on.
  2. Open the Components tab in the tree view and select New component.
  3. Select an empty part of Studio, so the new component isn't selected.
  4. Copy the YAML on this page and press Ctrl+V. lcsDataTable appears with all its properties.
  5. On a screen, insert it from Insert > Custom > lcsDataTable.

What it needs

  • No premium licence: standard controls, no connectors
  • Modern controls and themes: on
  • Enhanced component properties: on
  • Tested in Power Apps Studio 3.26094.9 on October 17, 2026
  • Version 0.2.0

Properties (30)

Read from the component's own YAML, so they always match what you paste.

Inputs
PropertyKindTypeDefault
Columns

The columns, in order, up to six: Label, Width in pixels, and Kind: Text, Strong (bold), Badge (a coloured pill) or Progress (a segmented bar from text such as 2/4). Column 1 shows C1 from Rows, and so on.

InputTableTable( {Label: "Order", Width: 110, Kind: "Strong"}, {Label: "Customer", Width: 200, Kind: "Text"}, {Label: "Status", Width: 140, Kind: "Badge"}, {Label: "Progress", Width: 190, Kind: "Progress"}, {Label: "Due", Width: 110, Kind: "Text"}, {Label: "Priority", Width: 110, Kind: "Badge"} )
Rows

The rows: Id, and the text for each column in C1 to C6. Sort, filter and page them in your app.

InputTableTable( {Id: "1001", C1: "#1001", C2: "Avery Brooks", C3: "In progress", C4: "2/4", C5: "Mar 3", C6: "High"}, {Id: "1002", C1: "#1002", C2: "Jordan Lee", C3: "Completed", C4: "5/5", C5: "Mar 5", C6: "Medium"}, {Id: "1003", C1: "#1003", C2: "Priya Nair", C3: "On hold", C4: "1/3", C5: "Mar 9", C6: "Low"}, {Id: "1004", C1: "#1004", C2: "Mateo Alvarez", C3: "Not started", C4: "0/4", C5: "Mar 12", C6: "High"} )
BadgeStyles

The colours of Badge pills by their text: Value, Fill and Ink. Text with no style is grey.

InputTableTable( {Value: "In progress", Fill: RGBA(219, 234, 254, 1), Ink: RGBA(30, 64, 175, 1)}, {Value: "Completed", Fill: RGBA(220, 252, 231, 1), Ink: RGBA(22, 101, 52, 1)}, {Value: "On hold", Fill: RGBA(254, 243, 199, 1), Ink: RGBA(146, 64, 14, 1)}, {Value: "Not started", Fill: RGBA(243, 244, 246, 1), Ink: RGBA(75, 85, 99, 1)}, {Value: "High", Fill: RGBA(254, 226, 226, 1), Ink: RGBA(153, 27, 27, 1)}, {Value: "Medium", Fill: RGBA(254, 243, 199, 1), Ink: RGBA(146, 64, 14, 1)}, {Value: "Low", Fill: RGBA(220, 252, 231, 1), Ink: RGBA(22, 101, 52, 1)} )
View

The view to start with: Table, Cards or List.

InputText"Table"
ShowViewToggle

Shows the Table, Cards and List switch.

InputBooleantrue
TitleColumn

The column that names a row: the title of a card or list item, and the name screen readers hear.

InputNumber2

Guide

Use lcsDataTable for any list of records people scan, open and act on: requests, orders, cases, tasks. A plain gallery needs all of this built by hand. Microsoft's modern Data grid control can't be styled this way. This component gives you:

  • Three views from one switch: a Table, Cards that wrap two or three across, and a List with an initial and pills. The user picks; you can start them on any view.
  • Select a row to open it. The whole row, card or list item is the button, and it runs OnRowSelect(RowId).
  • Columns from a table you set: up to six, each with a label, a width and a kind. Text, Strong (bold, for IDs), Badge (a coloured pill) or Progress (a segmented bar from text such as 2/4).
  • Pills coloured by their text, from your BadgeStyles table: In progress is blue, Completed green, High red. Text with no style is grey.
  • Sortable headers that tell your app which column and which way (OnSort), so you sort the data source itself.
  • Checkboxes and bulk actions: select rows, then Approve or Reject them together (OnBulkAction(Action, RowIds)).
  • A row menu that opens inside the row (View, Edit, Delete) and runs OnRowAction(Action, RowId).
  • Loading and empty states, two densities, your AccentColor and a Dark theme.

Did it work for you?

1 rating so far. The average shows from 3 ratings.Worked in 1 reader's app.

Sign in to rate it or to say it worked in your app.

Comments

No comments yet. Share how you used it, or ask something.

Sign in to comment or reply. Comments show under a display name you choose, never your email.