The user can bring up the context menu by right clicking on a cell. By default, the context menu provides 'copy', 'paste' and 'export'. Copy will copy the selected cells or rows to the clipboard. Paste will always, forever, be disabled.
You can customise the context menu in one of two ways:
colDef.contextMenuItems. This can either be a list of menu items, or a callback which is passed the list of default menu items.
- Set the grid option
getContextMenuItems(). This callback will be passed the list of default menu items as well as the column.
colDef.contextMenuItems will take priority over
The menu item list should be a list with each item either a) a string or b) a
MenuItemDef description. Use 'string' to pick from built-in menu items (listed below) and use
MenuItemDef descriptions for your own menu items.
If you want to access your underlying data item, you can access that through the rowNode as
Note: if you set
checked=true, then the icon will be ignored - these options are mutually exclusive.
If you want to turn off the context menu completely, set the grid property
The following is a list of all the default built in menu items with the rules about when they are shown.
autoSizeAll: Auto-size all columns. Not shown by default.
expandAll: When set, it's only shown if grouping by at least one column. Not shown by default.
contractAll: Collapse all groups. When set, it's only shown if grouping by at least one column. Not shown by default.
copy: Copy selected value to clipboard. Shown by default.
copyWithHeaders: Copy selected value to clipboard with headers. Shown by default.
copyWithGroupHeaders: Copy selected value to clipboard with headers and header groups. Shown by default.
cut: Cut the selected value to clipboard. Not shown by default.
paste: Always disabled (see note in clipboard section). Always disabled. Shown by default.
resetColumns: Reset all columns. Not shown by default.
export: Export sub menu (containing csvExport and excelExport). Shown by default.
csvExport: Export to CSV using all default export values. Shown by default.
excelExport: Export to Excel (.xlsx) using all default export values. Shown by default.
chartRange: Chart a range of selected cells. Only shown if charting is enabled. Configured via chartToolPanelsDef.
pivotChart: Chart all grouped and pivoted data from the grid. Only shown if charting is enabled and in Pivot Mode. Configured via chartToolPanelsDef.
One drawback of using the AG Grid context menu is that you may want to show the browser's context menu when debugging, for example in order to access your browser's dev tools. If you want the grid to do nothing (and hence allow the browser to display its context menu) then hold down the ^ Ctrl key while clicking for the context menu. If you always want the grid's context menu, even when ^ Ctrl is pressed, then set
Hide the context menu with the grid API
hidePopupMenu(), which will hide either the context menu or the Column Menu, whichever is showing.
Below shows a configured context menu in action demonstrating a customised menu with a mix of custom items. You should notice the following:
- A mix of built in items and custom items are used.
- The first item uses the contents of the cell to display its value.
- Country and Person are sub menus. The country sub menu contains icons.
- The top menu item has CSS classes applied to it.
- The 'Always Disabled' menu item has a tooltip.
Under most scenarios, the menu will fit inside the grid. However if the grid is small and / or the menu is very large, then the menu will not fit inside the grid and it will be clipped.
This will lead to a bad user experience which is demonstrated in the following example:
- Open the context menu or the column menu in the grid
- Notice the menu will not be fully visible (i.e. clipped)
The solution is to set the
DOM element to use as the popup parent for grid popups (context menu, column menu etc).
Each mechanism allows you to set the popup parent to any HTML DOM element. The element must:
- Exist in the DOM.
- Cover the same area as the grid (or simply be a parent of the grid), so that when the popup is positioned, it can be positioned over the grid.
Most of the time, you will simply set the popup parent to the document body.
The example below is identical to the previous example except it sets the popup parent to the document body.