New to Kendo UI for jQueryStart a free 30-day trial

Adaptive Tools

Starting with the Q2 2025 release, the Grid component supports rendering selected toolbar tools in adaptive mode. This feature improves usability on smaller screens by displaying certain UI elements—such as sorting, filtering, grouping, and editing—in a mobile-friendly ActionSheet.

To enable this behavior, configure the Grid with the adaptiveMode configuration option.

Change Theme
Theme
Loading ...

When the adaptiveMode is enabled and the Grid is rendered on small or medium screens, the Grid will display popups for sorting, filtering, and grouping in an ActionSheet. To ensure these tools function as expected, the corresponding configuration options (e.g., sortable, filterable, groupable) must be enabled on the Grid instance. If the Grid has editable mode pop set, an ActionSheet will also be displayed for editing or creating records.

The adaptive tools are not displayed and are not supported in the overflow mode of the toolbar.

Sorting

To use sorting in adaptive mode, enable the Grid's sortable option.

  • In single sorting mode, the sorting popup will close immediately after a field is selected, and the Grid will be sorted accordingly.

  • In multiple or mixed modes, the popup will remain open until the user clicks the Done button. Sorting is applied in the background as fields are selected.

    <div id="grid"></div>
    <script src="https://demos.telerik.com/kendo-ui/content/shared/js/products.js"></script>

    <script>
        $("#grid").kendoGrid({
            dataSource: {
                data: products,
                schema: {
                    model: {
                        fields: {
                            ProductName: { type: "string" },
                            UnitPrice: { type: "number" },
                            UnitsInStock: { type: "number" },
                            Discontinued: { type: "boolean" }
                        }
                    }
                },
                pageSize: 20
            },
            height: 550,
            toolbar: ["sort"], 
            adaptiveMode: "auto",
            sortable: {
                mode: "multiple",
                showIndexes: true
            },                
            pageable: true,
            columns: [
                "ProductName",
                { field: "UnitPrice", title: "Unit Price", format: "{0:c}", width: "80px" },
                { field: "UnitsInStock", title: "Units In Stock", width: "80px" },
                { field: "Discontinued" }
            ]
        });
    </script>

Filtering

The adaptive filter UI is based on the Grid’s filterable settings. These options determine how filters are presented and applied within the ActionSheet or popup. For example, if the filterable.extra is disabled for the Grid or filterable.multi is enabled for any of the columns, the filter UI will be applied also in the filter adaptive tool.

    <div id="grid"></div>
    <script src="https://demos.telerik.com/kendo-ui/content/shared/js/products.js"></script>

    <script>
        $("#grid").kendoGrid({
          dataSource: {
            data: products,
            schema: {
              model: {
                fields: {
                  ProductName: { type: "string" },
                  UnitPrice: { type: "number" },
                  UnitsInStock: { type: "number" },
                  Discontinued: { type: "boolean" },
                },
              },
            },
            pageSize: 20,
          },
          height: 550,
          toolbar: ["filter"],
          adaptiveMode: "auto",
          filterable: {
            extra: false,
          },
          pageable: true,
          columns: [
            "ProductName",
            {
              field: "UnitPrice",
              filterable: {
                multi: true,
              },
              title: "Unit Price",
              format: "{0:c}",
              width: "80px",
            },
            { field: "UnitsInStock", title: "Units In Stock", width: "80px" },
            { field: "Discontinued" },
          ],
        });
      </script>

Grouping

The adaptive grouping tool allows users to add, remove, and reorder grouped columns. By default, groups can be rearranged via drag-and-drop within the popup. When the reorderButtons option is enabled, you can reorder the groups from the displayed arrow up and down arrow buttons.

    <div id="grid"></div>
    <script src="https://demos.telerik.com/kendo-ui/content/shared/js/products.js"></script>

    <script>
        $("#grid").kendoGrid({
          dataSource: {
            data: products,
            schema: {
              model: {
                fields: {
                  ProductName: { type: "string" },
                  UnitPrice: { type: "number" },
                  UnitsInStock: { type: "number" },
                  Discontinued: { type: "boolean" },
                },
              },
            },
            pageSize: 20,
          },
          height: 550,
          toolbar: ["group"],
          adaptiveMode: "auto",
          groupable: true,
          pageable: true,
          columns: [
            "ProductName",
            {
              field: "UnitPrice",
              filterable: {
                multi: true,
              },
              title: "Unit Price",
              format: "{0:c}",
              width: "80px",
            },
            { field: "UnitsInStock", title: "Units In Stock", width: "80px" },
            { field: "Discontinued" },
          ],
        });
      </script>

Editing

The Grid supports editing in adaptive mode for all available editing configurations: popup, inline, and incell.

To enable editing or deleting rows in adaptive mode when the popup or inline editing is enabled, configure the Grid with the selectable option. In a Grid with configured incell editing mode, selectable is needed only for deleting a row.

When multiple rows are selected, operations will apply to the most recently selected row.

Inline Editing

When a row is selected, an Edit button appears in the toolbar. Once the user finishes editing (by blurring the row), the Grid exits edit mode and displays Save changes and Cancel changes buttons.

The inline editing mode is demonstrated in the example below:

        <div id="grid"></div>
        <script>
            $(document).ready(function () {
            var crudServiceBaseUrl = "https://demos.telerik.com/kendo-ui/service",
                dataSource = new kendo.data.DataSource({
                    transport: {
                        read:  {
                            url: crudServiceBaseUrl + "/Products",
                            dataType: "jsonp"
                        },
                        update: {
                            url: crudServiceBaseUrl + "/Products/Update",
                            dataType: "jsonp"
                        },
                        destroy: {
                            url: crudServiceBaseUrl + "/Products/Destroy",
                            dataType: "jsonp"
                        },
                        create: {
                            url: crudServiceBaseUrl + "/Products/Create",
                            dataType: "jsonp"
                        },
                        parameterMap: function(options, operation) {
                            if (operation !== "read" && options.models) {
                                return {models: kendo.stringify(options.models)};
                            }
                        }
                    },
                    pageSize: 20,
                    schema: {
                        model: {
                            id: "ProductID",
                            fields: {
                                ProductID: { editable: false, nullable: true },
                                ProductName: { validation: { required: true } },
                                UnitPrice: { type: "number", validation: { required: true, min: 1} },
                                Discontinued: { type: "boolean" },
                                UnitsInStock: { type: "number", validation: { min: 0, required: true } }
                            }
                        }
                    }
                });

            $("#grid").kendoGrid({
                dataSource: dataSource,
                height: 550,
                    toolbar: [
                        "create",
                        "edit",
                        "cancel",
                        "save",
                        "filter",
                        "sort",
                        {
                            name: "spacer", type: "spacer"
                        },
                        "columnChooser"
                    ],
                    selectable: "single, row",
                    editable: "inline",
                    adaptiveMode: "auto",
                    filterable: true,
                    sortable: true,
                    pageable: true,
                    columns: [
                        "ProductName",
                        { field: "UnitPrice", title: "Unit Price", format: "{0:c}", width: 120 },
                        { field: "UnitsInStock", title: "Units In Stock", width: 120 },
                        { field: "Discontinued", width: 120 }
                    ],
            });
        });
        </script>

Incell Editing

Users can edit cells by clicking into them. After a cell is edited and loses focus, the toolbar displays Save changes and Cancel changes buttons.

To delete a row, the user must first select the row, then click the Delete button in the toolbar.

<div id="grid"></div>
        <script>
            $(document).ready(function () {
            var crudServiceBaseUrl = "https://demos.telerik.com/kendo-ui/service",
                dataSource = new kendo.data.DataSource({
                    transport: {
                        read:  {
                            url: crudServiceBaseUrl + "/Products",
                            dataType: "jsonp"
                        },
                        update: {
                            url: crudServiceBaseUrl + "/Products/Update",
                            dataType: "jsonp"
                        },
                        destroy: {
                            url: crudServiceBaseUrl + "/Products/Destroy",
                            dataType: "jsonp"
                        },
                        create: {
                            url: crudServiceBaseUrl + "/Products/Create",
                            dataType: "jsonp"
                        },
                        parameterMap: function(options, operation) {
                            if (operation !== "read" && options.models) {
                                return {models: kendo.stringify(options.models)};
                            }
                        }
                    },
                    pageSize: 20,
                    schema: {
                        model: {
                            id: "ProductID",
                            fields: {
                                ProductID: { editable: false, nullable: true },
                                ProductName: { validation: { required: true } },
                                UnitPrice: { type: "number", validation: { required: true, min: 1} },
                                Discontinued: { type: "boolean" },
                                UnitsInStock: { type: "number", validation: { min: 0, required: true } }
                            }
                        }
                    }
                });

            $("#grid").kendoGrid({
                dataSource: dataSource,
                height: 550,
                    toolbar: [
                        "create",
                        "cancelEdit",
                        "cancel",
                        "save",
                        "update",
                        "destroy",
                        {
                            name: "spacer", type: "spacer"
                        },
                        "filter",
                        "sort",
                        "columnChooser"
                    ],
                    selectable: "single, row",
                    editable: "incell",
                    adaptiveMode: "auto",
                    filterable: true,
                    sortable: true,
                    pageable: true,
                    columns: [
                        "ProductName",
                        { field: "UnitPrice", title: "Unit Price", format: "{0:c}", width: 120 },
                        { field: "UnitsInStock", title: "Units In Stock", width: 120 },
                        { field: "Discontinued", width: 120 }
                    ],
            });
        });
        </script>

When popup editing is enabled, selected rows can be edited or deleted using the Edit and Delete toolbar buttons. Additionally, the Add new record form will be displayed inside an ActionSheet on small and medium screens.

<div id="grid"></div>
        <script>
            $(document).ready(function () {
            var crudServiceBaseUrl = "https://demos.telerik.com/kendo-ui/service",
                dataSource = new kendo.data.DataSource({
                    transport: {
                        read:  {
                            url: crudServiceBaseUrl + "/Products",
                            dataType: "jsonp"
                        },
                        update: {
                            url: crudServiceBaseUrl + "/Products/Update",
                            dataType: "jsonp"
                        },
                        destroy: {
                            url: crudServiceBaseUrl + "/Products/Destroy",
                            dataType: "jsonp"
                        },
                        create: {
                            url: crudServiceBaseUrl + "/Products/Create",
                            dataType: "jsonp"
                        },
                        parameterMap: function(options, operation) {
                            if (operation !== "read" && options.models) {
                                return {models: kendo.stringify(options.models)};
                            }
                        }
                    },
                    pageSize: 20,
                    schema: {
                        model: {
                            id: "ProductID",
                            fields: {
                                ProductID: { editable: false, nullable: true },
                                ProductName: { validation: { required: true } },
                                UnitPrice: { type: "number", validation: { required: true, min: 1} },
                                Discontinued: { type: "boolean" },
                                UnitsInStock: { type: "number", validation: { min: 0, required: true } }
                            }
                        }
                    }
                });

            $("#grid").kendoGrid({
                dataSource: dataSource,
                height: 550,
                    toolbar: [
                        "create",
                        "edit",
                        "cancelEdit",
                        "cancel",
                        "save",
                        "update",
                        "destroy",
                        {
                            name: "spacer", type: "spacer"
                        },
                        "filter",
                        "sort",
                        "columnChooser"
                    ],
                    selectable: "single, row",
                    editable: "popup",
                    adaptiveMode: "auto",
                    filterable: true,
                    sortable: true,
                    pageable: true,
                    columns: [
                        "ProductName",
                        { field: "UnitPrice", title: "Unit Price", format: "{0:c}", width: 120 },
                        { field: "UnitsInStock", title: "Units In Stock", width: 120 },
                        { field: "Discontinued", width: 120 }
                    ],
            });
        });
        </script>

Other Customization Options

The following configuration options provide additional control over the appearance and behavior of adaptive tools:

  • showInactiveTools—Controls whether the inactive tools in the toolbar are hidden or displayed in disabled state;
  • adaptiveTitle—Customizes the title text displayed in the adaptive view;
  • adaptiveSubtitle—Customizes the subtitle text displayed in the adaptive view;

See Also