An alternative to using the browser's select popup for dropdowns inside the grid.
The Rich Select Cell Editor allows users to enter a cell value from a list of provided values by searching or filtering the list.
 Enabling Rich Select Cell Editor Copy Link  
Edit any cell in the grid below to see the Rich Select Cell Editor.
Enabled with agRichSelectCellEditor and configured with IRichCellEditorParams.
columnDefs: [
    {
        cellEditor: 'agRichSelectCellEditor',
        cellEditorParams: {
            values: ['English', 'Spanish', 'French', 'Portuguese', '(other)'],
        }
        // ...other props
    }
]
Benefits over browser's select are as follows:
- Uses DOM row virtualisation so very large lists can be displayed.
- Integrates with the grid perfectly, avoiding glitches seen with the standard select.
- Uses HTML to render the values: you can provide cell renderers to customise what each value looks like.
 Customisation Copy Link  
 Cell Renderer Copy Link  
The cell renderer used within the editor can be customised as shown below:
columnDefs: [
    {
        cellEditor: 'agRichSelectCellEditor',
        cellRenderer: ColourCellRenderer,
        cellEditorParams: {
            values: ['AliceBlue', 'AntiqueWhite', 'Aqua', /* .... many colours */ ],
            cellRenderer: ColourCellRenderer,
            valueListMaxHeight: 220
        }
        // ...other props
    }
]
The interface for the Rich CellEditor Component is as follows:
interface ICellEditorRendererAngularComp {
    // Mandatory - Params for rendering
    agInit(params: IRichCellEditorRendererParams): void;
    }
The Component is provided props containing, amongst other things, the value to be rendered.
class MyCustomEditorRenderer implements ICellEditorRendererAngularComp {
  // ...
  agInit(props: IRichCellEditorRendererParams): void {
    this.value = props.value;
  }
  // ...
The provided props (interface IRichCellEditorRendererParams) are:
| any | 
|  The value to be rendered by the renderer  | 
|  The value to be renderer by the renderer formatted by the editor  | 
|  Gets the current value of the editor  | 
|  Sets the value of the editor  | 
|  Used to set a tooltip to the renderer  | 
|  The grid api.  | 
|  Application context as set on  gridOptions.context. | 
 Search Values Copy Link  
Different types of search are possible within the editor list as shown below:
columnDefs: [
    {
        cellEditor: 'agRichSelectCellEditor',
        cellRenderer: ColourCellRenderer,
        cellEditorParams: {
            values: ['AliceBlue', 'AntiqueWhite', 'Aqua', /* .... many colours */ ],
            allowTyping: true,
            filterList: true,
            highlightMatch: true,
            valueListMaxHeight: 220
        }
        // ...other props
    }
]
 Allow Typing Copy Link  
The editor input can be configured to allow text input, which is used to match different parts of the editor list items as shown below:
columnDefs: [
    {
        cellEditor: 'agRichSelectCellEditor',
        cellRenderer: ColourCellRenderer,
        cellEditorParams: {
            values: ['AliceBlue', 'AntiqueWhite', 'Aqua', /* .... many colours */ ],
            allowTyping: true,
            filterList: true,
            highlightMatch: true,
            valueListMaxHeight: 220
        }
        // ...other props
    }
]
 Format Values Copy Link  
Items in the editor list can be formatted as shown below:
columnDefs: [
    {
        cellEditor: 'agRichSelectCellEditor',
        cellEditorParams: {
            values: ['English', 'Spanish', 'French', 'Portuguese', '(other)'],
            formatValue: value => value.toUpperCase()
        }
        // ...other props
    }
]
 Complex Objects Copy Link  
When working with complex objects, a formatValue callback function is required to convert that complex object into a string that can be rendered by the Rich Select Editor. If the Grid Column being edited is not using complex values, or if the Rich Select Editor value object has a different format (different properties) than the object used by the Grid Column, a parseValue callback function is required to convert the editor format into the grid column's format.
When working with Cell Renderers, a formatValue callback should still be provided so it will be possible to use functionality that relies on string values such as allowTyping.
const colors = [
  { name: "Pink", code: "#FFC0CB" },
  // ...other values
];
columnDefs: [
    {
        cellEditor: 'agRichSelectCellEditor',
        keyCreator: params => params.value.name,
        cellEditorParams: {
            values: colors,
            formatValue: value => value.toUpperCase()
        }
        // ...other props
    }
]
 Multi Selection Copy Link  
The editor can be configured to allow the selection of multiple values as shown below:
columnDefs: [
    {
        cellEditor: 'agRichSelectCellEditor',
        cellEditorParams: {
            values: ['AliceBlue', 'AntiqueWhite', 'Aqua', /* .... many colours */ ],
            multiSelect: true,
            searchType: 'matchAny',
            filterList: true,
            highlightMatch: true,
            valueListMaxHeight: 220
        }
        // ...other props
    }
]
 Async Values Copy Link  
List values can be provided asynchronously to the editor as shown below:
The values property can receive a Promise that resolves an array of values.
function getValueFromServer(_params: ICellEditorParams): Promise<string[]> {
  return new Promise((resolve) => {
    setTimeout(() => resolve(['English', 'Spanish', 'French', 'Portuguese', '(other)']), 1000);
  });
}
columnDefs: [
    {
        cellEditor: 'agRichSelectCellEditor',
        cellEditorParams: {
            values: getValueFromServer,
        }
        // ...other props
    }
]
 API Reference Copy Link  
Properties available on the IRichCellEditorParams<TData = any, TValue = any, GValue = any> interface.
|  The list of values to be selected from.  | 
|  The row height, in pixels, of each value.  | 
|  The cell renderer to use to render each value. Cell renderers are useful for rendering rich HTML values, or when processing complex data.  | 
|  The custom parameters to be used by the cell render.  | 
|  Set to  trueto be able to type values in the display area. | 
|  If  trueit will filter the list of values as you type (only relevant whenallowTyping=true). | 
|  The type of search algorithm that is used when searching for values. match- Matches if the value starts with the text typed.matchAny- Matches if the value contains the text typed.fuzzy- Matches the closest value to text typed. | 
|  If  true, each item on the list of values will highlight the part of the text that matches the input.  Note: It only makes sense to use this option whenfilterLististrueandsearchTypeis notfuzzy. | 
|  If  truethis component will allow multiple items from the list of values to be selected.  Note: This feature does not work withallowTyping=true. | 
|  If  truethe option to remove all selected options will not be displayed.  Note: This feature only works whenmultiSelect=true. | 
|  When  multiSelect=truethe editor will automatically show the selected items as "pills". Set this property totruesuppress this behaviour. | 
|  The value in  msfor the search algorithm debounce delay (only relevant whenallowTyping=false). | 
|  A string value to be used when no value has been selected.  | 
|  The space in pixels between the value display and the list of items.        | 
|  The maximum height of the list of items. If the value is a  numberit will be  treated as pixels, otherwise it should be a valid CSS size string. | 
|  The maximum width of the list of items. If the value is a  numberit will be  treated as pixels, otherwise it should be a valid CSS size string. Default: Width of the cell being edited. | 
|  A callback function that allows you to change the displayed value for simple data.  | 
|  A callback function that allows you to convert the value of the Rich Select Editor to  the data format of the Grid Column when they are different.
      | 
Continue to the next section: Number Cell Editor.