Example: Basic DataTable

The DataTable widget displays data in a tabular format. Use plugins and extensions to add features and functionality to the Y.DataTable class.

Simple DataTable Use Cases

Note: be sure to add the yui3-skin-sam classname to the page's <body> element or to a parent element of the widget in order to apply the default CSS skin. See Understanding Skinning.

<div class="example yui3-skin-sam"> <!-- You need this skin class -->
    <div id="simple"></div>

    <div id="labels"></div>
</div>

A basic table can be rendered into a given container by passing in a simple array of columns and an array of data objects into the constructor. As long as the columns map directly to the keys of the data objects, the table will be generated automatically from the data provided.

YUI().use("datatable", function (Y) {

    // A table from data with keys that work fine as column names
    var simple = new Y.DataTable({
        columns: ["id", "name", "price"],
        data   : [
            { id: "ga_3475", name: "gadget",   price: "$6.99" },
            { id: "sp_9980", name: "sprocket", price: "$3.75" },
            { id: "wi_0650", name: "widget",   price: "$4.25" }
        ],
        summary: "Price sheet for inventory parts",
        caption: "Example table with simple columns"
    });
    
    simple.render("#simple");

});

Your column definitions may also be objects if additional column configuration is needed. For example, the following column definitions include header labels and set the <th>'s abbr attribute. Use the key property to relate a column to its corresponding data field.

YUI().use("datatable", function(Y) {

    // Data with less user friendly field names
    var data = [
        {
            mfr_parts_database_id   : "ga_3475",
            mfr_parts_database_name : "gadget",
            mfr_parts_database_price: "$6.99"
        },
        {
            mfr_parts_database_id   : "sp_9980",
            mfr_parts_database_name : "sprocket",
            mfr_parts_database_price: "$3.75"
        },
        {
            mfr_parts_database_id   : "wi_0650",
            mfr_parts_database_name : "widget",
            mfr_parts_database_price: "$4.25"
        }
    ];

    // Column definitions that use configured header labels, abbrs.
    // Use "key" to identify which data field has its content.
    var columnDef = [
        {
            key  : "mfr_parts_database_id",
            label: "Mfr Part ID",
            abbr : "ID"
        },
        {
            key  : "mfr_parts_database_name",
            label: "Mfr Part Name",
            abbr : "Name"
        },
        {
            key  : "mfr_parts_database_price",
            label: "Wholesale Price",
            abbr : "Price"
        }
    ];

    var withColumnLabels = new Y.DataTable({
        columns: columnDef,
        data   : data,
        summary: "Price sheet for inventory parts",
        caption: "These columns have labels and abbrs"
    }).render('#labels');

});

Lighten the module payload

The datatable module includes a number of features not used in this example. For a smaller module payload, use the datatable-base module.

// datatable-base includes only basic table rendering, but in this case,
// that's enough.
YUI().use("datatable-base", function (Y) {

    // A table from data with keys that work fine as column names
    var simple = new Y.DataTable({
        columns: ["id", "name", "price"],
        data   : [ ... ]
    }).render("#simple");

});