1# Table (lv_table) 2 3## Overview 4 5Tables, as usual, are built from rows, columns, and cells containing texts. 6 7The Table object is very lightweight because only the texts are stored. No real objects are created for cells but they are just drawn on the fly. 8 9The Table is added to the default group (if it is set). Besides the Table is an editable object to allow selecting a cell with encoder navigation too. 10 11## Parts and Styles 12- `LV_PART_MAIN` The background of the table uses all the typical background style properties. 13- `LV_PART_ITEMS` The cells of the table also use all the typical background style properties and the text properties. 14 15 16## Usage 17 18### Set cell value 19 20The cells can store only text so numbers need to be converted to text before displaying them in a table. 21 22`lv_table_set_cell_value(table, row, col, "Content")`. The text is saved by the table so it can be even a local variable. 23 24Line breaks can be used in the text like `"Value\n60.3"`. 25 26New rows and columns are automatically added is required 27 28### Rows and Columns 29 30To explicitly set number of rows and columns use `lv_table_set_row_cnt(table, row_cnt)` and `lv_table_set_col_cnt(table, col_cnt)` 31 32### Width and Height 33 34The width of the columns can be set with `lv_table_set_col_width(table, col_id, width)`. The overall width of the Table object will be set to the sum of columns widths. 35 36The height is calculated automatically from the cell styles (font, padding etc) and the number of rows. 37 38### Merge cells 39 40Cells can be merged horizontally with `lv_table_add_cell_ctrl(table, row, col, LV_TABLE_CELL_CTRL_MERGE_RIGHT)`. To merge more adjacent cells call this function for each cell. 41 42### Scroll 43If the label's width or height is set to `LV_SIZE_CONTENT` that size will be used to show the whole table in the respective direction. 44E.g. `lv_obj_set_size(table, LV_SIZE_CONTENT, LV_SIZE_CONTENT)` automatically sets the table size to show all the columns and rows. 45 46If the width or height is set to a smaller number than the "intrinsic" size then the table becomes scrollable. 47 48## Events 49- `LV_EVENT_VALUE_CHANGED` Sent when a new cell is selected with keys. 50- `LV_EVENT_DRAW_PART_BEGIN` and `LV_EVENT_DRAW_PART_END` are sent for the following types: 51 - `LV_TABLE_DRAW_PART_CELL` The individual cells of the table 52 - `part`: `LV_PART_ITEMS` 53 - `draw_area`: area of the indicator 54 - `rect_dsc` 55 - `label_dsc` 56 - `id`: current row × col count + current column 57 58See the events of the [Base object](/widgets/obj) too. 59 60Learn more about [Events](/overview/event). 61 62## Keys 63 64The following *Keys* are processed by the Tables: 65- `LV_KEY_RIGHT/LEFT/UP/DOWN/` Select a cell. 66 67Note that, as usual, the state of `LV_KEY_ENTER` is translated to `LV_EVENT_PRESSED/PRESSING/RELEASED` etc. 68 69`lv_table_get_selected_cell(table, &row, &col)` can be used to get the currently selected cell. Row and column will be set to `LV_TABLE_CELL_NONE` no cell is selected. 70 71Learn more about [Keys](/overview/indev). 72 73## Example 74 75```eval_rst 76 77.. include:: ../../../examples/widgets/table/index.rst 78 79``` 80 81### MicroPython 82No examples yet. 83 84## API 85 86```eval_rst 87 88.. doxygenfile:: lv_table.h 89 :project: lvgl 90 91``` 92