Difference between revisions of "Scout/Concepts/Table"
(→Summary Cell, Primary Columns) |
(Delete a row from the table merged from the forum) |
||
Line 66: | Line 66: | ||
For method 2 and 3 you need to be ensure that the array elements order match with the order of your table columns. | For method 2 and 3 you need to be ensure that the array elements order match with the order of your table columns. | ||
+ | |||
+ | === Delete a row from the table === | ||
+ | In a Table client-side, you have two ways to remove a row: | ||
+ | * deleteRow(..) | ||
+ | * discardRow(..) | ||
+ | |||
+ | ==== deleteRow(..) ==== | ||
+ | the row disappear from Table (as expected by the user), but is still present in the table. You can access it with ITableRow#getDeletedRows(). Later if you export the form content in the formData, you will get row in the table with the status ITableHolder.STATUS_DELETED and you can persist the deletion in the database: | ||
+ | |||
+ | <source lang="java"> | ||
+ | for (int i = 0; i < formData.getStandardTable().getRowCount(); i++) { | ||
+ | if (formData.getStandardTable().getRowState(i) == ITableHolder.STATUS_DELETED) { | ||
+ | //persist the deletion in the database. | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | In the server, you might use a switch on getRowState(), because the persistance operation depends on the row status: | ||
+ | |||
+ | <source lang="java"> | ||
+ | for (int i = 0; i < table.getRowCount(); i++) { | ||
+ | switch (table.getRowState(i)) { | ||
+ | case ITableHolder.STATUS_INSERTED: | ||
+ | //insert the row | ||
+ | break; | ||
+ | case ITableHolder.STATUS_DELETED: | ||
+ | //delete the row | ||
+ | break; | ||
+ | case ITableHolder.STATUS_UPDATED: | ||
+ | //modify the row | ||
+ | break; | ||
+ | case ITableHolder.STATUS_NON_CHANGED: | ||
+ | default: | ||
+ | //Do nothing | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | ==== discardRow(..) ==== | ||
+ | The row is removed from the table and lost. Nothing is sent to the server. | ||
+ | |||
+ | Now if you set {{ScoutProp|AutoDiscardOnDelete}} to <code>true</code> on the table, calling deleteRow(..) is equivalent to discardRow(..). | ||
+ | |||
+ | |||
+ | The semantic of a discarded row is: the row is deleted + there is no modification to commit to the server. The TableField assume there is no modifications. There is no "saveNeeded" status, the user will not be informed that he has pending modifications on the form... | ||
+ | |||
== TODO == | == TODO == | ||
{{note|TODO| Organize these subsections in section + subsection. Add description }} | {{note|TODO| Organize these subsections in section + subsection. Add description }} | ||
− | |||
− | |||
− | |||
Revision as of 09:26, 4 September 2013
Scout |
Wiki Home |
Website |
Download • Git |
Community |
Forums • Blog • Twitter • G+ |
Bugzilla |
Bugzilla |
A table is data structure that can be represented in a TablePage or a TableField.
Contents
Description
Table can contains a set of structured data: the structure of the entity is defined by the columns. Each entity contained in the table is a row. At the intersection of a column and a row is a Cell. A Cell describes how the value is represented (displayed text, colors, style, icon...).
Example
Imagine that you want to have a table of persons that are structured as followed:
- Name (String)
- First name (String)
- Age (Integer)
- Date of birth (Date)
A such table needs to contains 4 columns :
-
NameColumn
a String Column -
FirstNameColumn
a String Column -
AgeColumn
a Integer Column -
BirthDateColumn
a Date Column
Here is how this table looks like in the Explorer View of the SDK:
Access to the data
To access a value of a table, the common pattern is to go throw the column. For example if you want to access the age of a person, at a precise row index r, the code is:
private Integer getAgeOfPersonAtRow(int r){ return getTable().getAgeColumn().getValue(r); }
Add a rows in the table
The table API (client-side) offers different ways to add rows in the table:
1: One row, with type check on set value. (you get compile error if you change something in your table):
ITableRow row = getTable().createRow(); getTable().getNameColumn().setValue(row, "Smith"); getTable().getFirstNameColumn().setValue(row, "John"); getTable().getAgeColumn().setValue(row, 42); getTable().getBirthDateColumn().setValue(row, DateUtility.parse("14.12.1970", "dd.MM.yyyy")); getTable().addRow(row, true);
The second parameter correspond to "mark as inserted". false
(default value - if the parameter is omitted) the row will be insterted with a row Status: ITableRow.STATUS_NON_CHANGED
. If true
, the row will be inserted with the status ITableRow.STATUS_INSERTED
.
2: One row as Object[] array.
getTable().addRowsByArray( new Object[]{"Johnny", "Mcgee", 26, DateUtility.parse("25.05.1986", "dd.MM.yyyy")}, ITableRow.STATUS_INSERTED);
The second parameter indicate the status of the new row. ITableRow.STATUS_INSERTED
is the default status (it could be omitted in this example).
3: Multiple rows as Object[][] array.
getTable().addRowsByMatrix(new Object[][]{ new Object[]{"Isabella", "Barton", 32, DateUtility.parse("21.01.1980", "dd.MM.yyyy")}, new Object[]{"Dana", "Reyes", 56, DateUtility.parse("16.08.1956", "dd.MM.yyyy")} }, ITableRow.STATUS_INSERTED);
The second parameter indicate the status of the new row. ITableRow.STATUS_INSERTED
is the default status (it could be omitted in this example).
For method 2 and 3 you need to be ensure that the array elements order match with the order of your table columns.
Delete a row from the table
In a Table client-side, you have two ways to remove a row:
- deleteRow(..)
- discardRow(..)
deleteRow(..)
the row disappear from Table (as expected by the user), but is still present in the table. You can access it with ITableRow#getDeletedRows(). Later if you export the form content in the formData, you will get row in the table with the status ITableHolder.STATUS_DELETED and you can persist the deletion in the database:
for (int i = 0; i < formData.getStandardTable().getRowCount(); i++) { if (formData.getStandardTable().getRowState(i) == ITableHolder.STATUS_DELETED) { //persist the deletion in the database. } }
In the server, you might use a switch on getRowState(), because the persistance operation depends on the row status:
for (int i = 0; i < table.getRowCount(); i++) { switch (table.getRowState(i)) { case ITableHolder.STATUS_INSERTED: //insert the row break; case ITableHolder.STATUS_DELETED: //delete the row break; case ITableHolder.STATUS_UPDATED: //modify the row break; case ITableHolder.STATUS_NON_CHANGED: default: //Do nothing break; } }
discardRow(..)
The row is removed from the table and lost. Nothing is sent to the server.
Now if you set AutoDiscardOnDelete to true
on the table, calling deleteRow(..) is equivalent to discardRow(..).
The semantic of a discarded row is: the row is deleted + there is no modification to commit to the server. The TableField assume there is no modifications. There is no "saveNeeded" status, the user will not be informed that he has pending modifications on the form...
TODO
Display/Hide the data (Organize Table)
Table provides support to sort, to filter how the content is represented.
Sorting possibility
properties
Selection
Table also manages selection.
properties
Menu
Table can also contains Menus, to provide a possibility to trigger some actions (Menus are displayed in the context menu of the table).
Checkable
Summary Cell
Primary Columns