You can specify the way a user interacts with a cell, including how data in entered, displayed, and validated by specifying the cell type. The cell type defines an editor control for the cell that handles data entry, a formatter control to handle how the data is interpreted, and a renderer control that handles how the data is displayed in the cell. Examples of cell types are check box cell, date-time cell, or a simple text cell.
Cell types can be set for individual cells, columns, rows, a range of cells, or an entire sheet. For any cell type there are properties of a cell that can be set. In general, working with cell types includes defining the cell type, setting the properties, and applying that cell type to cells. In Spread, a cell has both an editor and a renderer. The editor is an actual control instance that is created and placed in the location of the cell when the cell goes into edit mode. The formatter decides how the displayed text appears. The renderer is simply code that paints that control inside the cell rectangle when the editor is not there.
Pay attention to data types when working with cell types. For several cell types, including ComboBoxCellType, DateTimeCellType, and MultipleOptionCellType, there is an EditorValue property. Make sure the Value property you are setting in the cell matches the type specified by the EditorValue property.
Editor, Formatter, and Renderer
A cell type consists of an editor, a renderer, and a formatter. The editor is responsible for creating and managing the cell's edit control when in edit mode. The formatter is responsible for converting the cell's value to and from text (for example when getting or setting a cell's Text property). The renderer is responsible for painting the cell when not in edit mode.
In most cases, you want the cell to look the same whether you are in edit mode or not in edit mode. In these cases, you would create a single cell type and assign it to the cell's CellType property. This single cell type is used as the cell's editor, renderer, and formatter. If you want the cell to appear differently depending on whether you are in edit mode or not in edit mode, then you can create two different cell types and assign one cell type as the cell's editor and the other cell type as the cell's renderer. You probably also want to assign one of the cell types as the cell's formatter. For more information, refer to the ICellType interface.
The design of cell editing requires that the cell type return an editor control which is then placed over the cell. The editor control can be text based (for example, text box) or graphics based (for example, check box). The editor control can drop down lists (for example, combo box) or pop up dialogs (for example, date picker). The EditBaseCellType class is a class from which the built-in text based cell types (for example, general, text, number, data-time, etc.) are derived. The class can also be used to derive custom cell types that are text based. The ISubEditor interface is used to combine a text-based editor with a drop-down list (for example, combo box) or pop-up dialog (for example date picker). The data model can hold any value, including colors. The cell type is always passed the raw value from the data model.
While you can assign a cell type to the cells in the row header or column header, the cell type is only used for painting purposes; header cells are renderable but are not editable. In‑cell editing is limited to cells in the data area. If you want to have something editable that acts like a header, you can hide (turn off) the column header, freeze the first row of the spreadsheet, then use the frozen row for your pseudo-header cells.