It is possible, for example, to define columns in the development environment (see the Columns page), define how many rows have to be in the table (see the DataTable page) and then only read and write values in the running application (See property: Item) from this table.
It is also possible to define neither columns nor rows and to create and remove them dynamically in the running application (see the InsertRow, RemoveRow, InsertCol, RemoveCol methods). But adding and removing columns are limited by the fact that thereat even all rows of the table are removed.
It is possible to define columns and rows and then to change them in the development environment.
Each cell of the table is counted into the application size for the purpose of licencing. But if a column of table in PmDataTable object is marked as "Read only", then the cells in this column are not counted into application size. This allows application designers to use such object for storing non-changing configuration values while the number of licenced variables is kept low. From the functional point of view this means that columns marked "Read only" can be written only once. Limitations of individual methods of the PmDataTable caused by "Read only" columns are explained in remark of this method..
Each cell is empty at the beginning. The cell is considered empty also if it contains numeric value 0 or an emty string "". New value can be written into such cell. After writing a non-zero value into the "Read only" column the cell is "locked". "Locked cell" becomes a constant and cannot be written again. Other still "unlocked" cells can be written into as needed. Methods that write into multiple cells simultaneously will write the values only into "unlocked cells" while the content of "locked" cells remains unchanged.
If any cell is locked in "Read only" column by writing non-empty value, then the the whole structure of the table is locked. Then it is no longer possible to add or remove rows or columns or change the structure of the table. The structure and dimensions of the table must be defined and modified before writing first non-empty value into a cell in "Read only" column.
The connection to values of the table can be defined directly in graphic items by the data binding PP - Binding to PROMOTIC object property. In the object property enter point of this binding it must be entered manually the following: Item(row,col), where row and col are indexes of the required row and column.
The PmTable graphic ActiveX object can be bound to values of the PmDataTable object by the information object that can be get by the GetInfo method. It means that from the PmDataTable object it is possible by the GetInfo method to get the object that is then inserted into the PmTable by the PmTable.FillFromInfo method, for example as follows:
Dim oTable, oDataTable
Set oTable = pMe.Pm("/Wnd/MyPanel").Items("/MyTab")
Set oDataTable = pMe.Pm("/Data/Params")
oTable.Acx.FillFromInfo oDataTable.GetInfo("data"), "bind"
Here it is presumed that in the application tree the PmPanel object is on the "/Wnd/MyPanel" path and the PmDataTable object on the "/Data/Params" path. If the "MyPanel" window panel is opened and it contains the graphic item named "MyTab", then we can call this script. It (see the last line) will fill up the PmTable object by data from the PmDataTable object and they will be bound ("bind" parameter) so that on each calling the PmTable.Draw method the content of the PmTable graphic item will be refreshed.