The Table component is very powerful and easy to configure. It is very flexible, allowing you to easily display your tabular data in a variety of ways. Important features include:
- Column Sorting. Your users can easily sort the data by clicking on the column headers. The sorting is a 3-mode sort: Ascending, Descending, and "Natural", which uses the default order of the data.
- Mapped Row Coloring. Map the background color of each row to a particular column. This allows you to give powerful visual indication of different types of rows in you tables, such as differentiating between alarm states.
- Column Translation. Allow the table component to handle all code mapping, such as mapping 0 to "Off" and 1 to "On". No fancy SQL knowledge required.
- Images. Map values to images, allowing intuitive visual cues.
- Progress Bar Indication. Display numeric data as progress bars inside cells, providing fast visual reference for bounded amounts.
- Number and Date formatting. Format numbers and dates to your exact specification.
- Column Hiding. Hide columns from view that contain identifying data used by the row coloring or by other components.
- Printing. Print tables directly to multi-paged printouts.
- Editing. Columns can be made editable. Changes will be reflected in the underlying dataset, at which point they can be mapped back to a database.
Basic Usage
The basic usage of the Table is to use a SQL Query binding on its Data property to let the table display data from a database. Often this query will by dynamic or indirect. See the Property Binding section for more information.
Binding to Selected Data
It is common to want to bind other components to values in the selected row of the table. In order to do this safely, you need to write an expression binding that protects against the case when nothing is selected or there are no rows. An expression like this would bind a label to the selected row's value for a column named "ProductCode":
if({Root Container.MyTable.selectedRow} = -1,
"n/a", // this is the fail case
{Root Container.MyTable.data}[{Root Container.MyTable.selectedRow},"ProductCode"] // this selects from the dataset
)
If you're binding to an integer, date, or other non-String type value thats inside a dateset, you'll need to cast the value to the correct type to make the expression parser happy. This binding would cast the selected "Quantity" column to an integer:
if({Root Container.MyTable.selectedRow} = -1,
-1, // this is the fail case
toInt({Root Container.MyTable.data}[{Root Container.MyTable.selectedRow},"Quantity"]) // this selects from the dataset
)
Changing the Column Widths
To change a table's column's widths, simply switch into preview mode and use your mouse to resize the columns, and then switch back to design mode. To ensure that the changes to the column widths appear in the client, right-click on the table to open the table customizer and click OK without clicking anywhere else in the customizer. Clicking anywhere else in the customizer before clicking OK will reset the table column widths.
Editable Table
By setting any column to editable in the Table's customizer, the user will be able to double-click in the cell and edit the data. You can the respond to the resulting cellEdited event with an event handler and persist the data. See the Event Types section for more information.
Exporting to HTML
You can export the table to an HTML file that retain's the table's formatting. To do this, use a script like this: (more about the table's exportHTML() function is here)
# Get a reference to the table and call the exportHTML() function
table = event.source.parent.getComponent("Table")
table.exportHTML("MyTable.html", "My Table Header", 500)
Exporting to CSV
You can export the table's raw data to a CSV file. To do this, use a script like this: (more about the table's exportCSV() function is here)
# Get a reference to the table and call the exportCSV() finction
table = event.source.parent.getComponent("Table")
table.exportCSV("MyTable.csv", 1)
Printing
Printing a table is a snap! Simply use the table's built in print function like this: (more about the table's print() function is here)
# Get a reference to the table and call the print() finction
table = event.source.parent.getComponent("Table")
table.print()