New to Kendo UI for jQuery? Download free 30-day trial

    Row Templates

    The Kendo UI Grid supports row templates which enable you to place custom content into a Grid row.

    For runnable examples, refer to:

    If you initialize the Grid from a <div> element, you can format any cell within the Grid by using templates within a script tag or within the template option on the column object.

    The following example demonstrates how to use a template for formatting the email address as a hyperlink through a template declared in a script block.

    <script id="template" type="text/x-kendo-tmpl">
        <tr>
            <td>
                #= firstName #
            </td>
            <td>
                #= lastName #
            </td>
            <td>
                <a href="mailto:#= email #">#= email #</a>
            </td>
        </tr>
    </script>

    The following example demonstrates how to specify the previous approach as a template for each row by passing it in to the rowTemplate option and by initializing it with the kendo.template function. As a result, the email address is an interactive hyperlink which opens a new email message when the user clicks it.

    $("#grid").kendoGrid({
        rowTemplate: kendo.template($("#template").html()),
       // Other configuration.
    });

    Figure 1: A Grid with an applied row template

    Kendo UI for jQuery Grid with row template

    Using Row Templates with Detail Templates

    A few requirements need to be met when the rowTemplate is used alongside a detailTemplate.

    1. The <tr> element of the rowTemplate needs to have a class k-master-row.
    2. The first <td> element of the rowTemplate needs to have a class k-hierarchy-cell.
    3. The element with class k-hierarchy-cell needs to contain an a element which will expand the row.

    Define the rowTemplate as an external template.

    Open In Dojo
        <script id="template" type="text/x-kendo-template">
            <tr class="k-master-row" data-uid="#= uid #">
                    <td class="k-hierarchy-cell">
                    #=kendo.ui.icon($('<a href="\#" aria-label="Expand"></a>'), { icon: "caret-alt-right" })#
                    </td>
                <td>
                    <strong>#: name #</strong>
                </td>
                <td>
                    <strong>#: age #</strong>
                </td>
            </tr>
        </script>
    
        <script id="detail-template" type="text/x-kendo-template">
          <div>
            Name: #: name #
          </div>
          <div>
            Age: #: age #
          </div>
        </script>
        <div id="grid"></div>
        <script>
        $("#grid").kendoGrid({
          columns: [
            { field: "name" },
            { field: "age" }
          ],
          dataSource: [
            { name: "Jane Doe", age: 30 },
            { name: "John Doe", age: 33 }
          ],
          detailTemplate: kendo.template($("#detail-template").html()),
          rowTemplate: kendo.template($("#template").html())
        });
        </script>

    Define the rowTemplate as a function.

    Open In Dojo
        <script id="detail-template" type="text/x-kendo-template">
          <div>
            Name: #: name #
          </div>
          <div>
            Age: #: age #
          </div>
        </script>
        <div id="grid"></div>
        <script>
          $("#grid").kendoGrid({
            columns: [
              { field: "name" },
              { field: "age" }
            ],
            dataSource: [
              { name: "Jane Doe", age: 30 },
              { name: "John Doe", age: 33 }
            ],
            detailTemplate: kendo.template($("#detail-template").html()),
            rowTemplate: rowTemplate
          });
    
          function rowTemplate(data) {
            return '<tr class="k-master-row" data-uid="' + data.uid + '"><td class="k-hierarchy-cell">'+kendo.ui.icon($('<a href="#" aria-label="Expand"></a>'), { icon: "caret-alt-right" })+'</td><td><strong>' + data.name + '</strong></td><td><strong>' + data.age + '</strong></td></tr>';
          }
        </script>

    KB Articles on Row Templates