Powerful Data Grid Plugin For Bootstrap - jQuery Bootgrid
File Size: | 130 KB |
---|---|
Views Total: | 17663 |
Last Update: | |
Publish Date: | |
Official Website: | Go to website |
License: | MIT |

Bootgrid is a lightweight yet flexible, powerful jQuery plugin used to render a dynamic, AJAX enabled, highly customizable data grid for Bootstrap pages.
More features:
- Header/footer navigation.
- Row selections with multiple select support.
- Table sorting.
- Searchable & live filtering.
- Built-in data converters and formatters.
- Useful API methods and events.
- Supports both client-side and server-side population.
- And much more...
Basic usage:
1. Insert the necessary jQuery library and Bootstrap framework into the web page.
<link rel="stylesheet" href="/path/to/bootstrap.min.css"> <script src="/path/to/jquery.min.js"></script> <script src="/path/to/bootstrap.min.js"></script>
2. Download and insert the jQuery Bootgrid's files into the page.
<link href="/dist/jquery.bootgrid.css" rel="stylesheet"> <script src="/dist/jquery.bootgrid.js"></script>
3. Just add the data-toggle="bootgrid"
attribute to your html table and the plugin will take care of the rest.
<table id="grid" class="table table-condensed table-hover table-striped" data-toggle="bootgrid"> <thead> <tr> <th data-column-id="id" data-identifier="true" data-type="numeric">ID</th> <th data-column-id="sender" data-order="asc">Sender</th> ... </tr> </thead> <tbody> <tr> <td>1</td> <td>[email protected]</td> </tr> ... </tbody> </table>
3. To initialize the data grid manually:
$("#grid").bootgrid();
4. Available options. Note that the following options also can be passed via data-OPTIONNAME
in the table elements.
$("#grid").bootgrid({ // it's a flag: 0 = none, 1 = top, 2 = bottom, 3 = both (top and bottom) navigation: 3, // page padding (pagination) padding: 2, // enable column selection columnSelection: true, // rows per page int or array of int (-1 represents "All") rowCount: [10, 25, 50, -1], /** * Enables row selection (to enable multi selection see also `multiSelect`). Default value is `false`. * * @property selection * @type Boolean * @default false * @for defaults * @since 1.0.0 **/ selection: false, /** * Enables multi selection (`selection` must be set to `true` as well). Default value is `false`. * * @property multiSelect * @type Boolean * @default false * @for defaults * @since 1.0.0 **/ multiSelect: false, /** * Enables entire row click selection (`selection` must be set to `true` as well). Default value is `false`. * * @property rowSelect * @type Boolean * @default false * @for defaults * @since 1.1.0 **/ rowSelect: false, /** * Defines whether the row selection is saved internally on filtering, paging and sorting * (even if the selected rows are not visible). * * @property keepSelection * @type Boolean * @default false * @for defaults * @since 1.1.0 **/ keepSelection: false, // highlights new rows (find the page of the first new row) highlightRows: false, // enable table sorting sorting: true, multiSort: false, /** * General search settings to configure the search field behaviour. * * @property searchSettings * @type Object * @for defaults * @since 1.2.0 **/ searchSettings: { /** * The time in milliseconds to wait before search gets executed. * * @property delay * @type Number * @default 250 * @for searchSettings **/ delay: 250, /** * The characters to type before the search gets executed. * * @property characters * @type Number * @default 1 * @for searchSettings **/ characters: 1 }, /** * Defines whether the data shall be loaded via an asynchronous HTTP (Ajax) request. * * @property ajax * @type Boolean * @default false * @for defaults **/ ajax: false, /** * Ajax request settings that shall be used for server-side communication. * All setting except data, error, success and url can be overridden. * For the full list of settings go to http://api.jquery.com/jQuery.ajax/. * * @property ajaxSettings * @type Object * @for defaults * @since 1.2.0 **/ ajaxSettings: { /** * Specifies the HTTP method which shall be used when sending data to the server. * Go to http://api.jquery.com/jQuery.ajax/ for more details. * This setting is overriden for backward compatibility. * * @property method * @type String * @default "POST" * @for ajaxSettings **/ method: "POST" }, /** * Enriches the request object with additional properties. Either a `PlainObject` or a `Function` * that returns a `PlainObject` can be passed. Default value is `{}`. * * @property post * @type Object|Function * @default function (request) { return request; } * @for defaults * @deprecated Use instead `requestHandler` **/ post: {}, // or use function () { return {}; } (reserved properties are "current", "rowCount", "sort" and "searchPhrase") /** * Sets the data URL to a data service (e.g. a REST service). Either a `String` or a `Function` * that returns a `String` can be passed. Default value is `""`. * * @property url * @type String|Function * @default "" * @for defaults **/ url: "", // or use function () { return ""; } /** * Defines whether the search is case sensitive or insensitive. * * @property caseSensitive * @type Boolean * @default true * @for defaults * @since 1.1.0 **/ caseSensitive: true, // note: The following properties should not be used via data-api attributes /** * Transforms the JSON request object in what ever is needed on the server-side implementation. * * @property requestHandler * @type Function * @default function (request) { return request; } * @for defaults * @since 1.1.0 **/ requestHandler: function (request) { return request; }, /** * Transforms the response object into the expected JSON response object. * * @property responseHandler * @type Function * @default function (response) { return response; } * @for defaults * @since 1.1.0 **/ responseHandler: function (response) { return response; }, /** * A list of converters. * * @property converters * @type Object * @for defaults * @since 1.0.0 **/ converters: { numeric: { from: function (value) { return +value; }, // converts from string to numeric to: function (value) { return value + ""; } // converts from numeric to string }, string: { // default converter from: function (value) { return value; }, to: function (value) { return value; } } }, /** * Contains all css classes. * * @property css * @type Object * @for defaults **/ css: { actions: "actions btn-group", // must be a unique class name or constellation of class names within the header and footer center: "text-center", columnHeaderAnchor: "column-header-anchor", // must be a unique class name or constellation of class names within the column header cell columnHeaderText: "text", dropDownItem: "dropdown-item", // must be a unique class name or constellation of class names within the actionDropDown, dropDownItemButton: "dropdown-item-button", // must be a unique class name or constellation of class names within the actionDropDown dropDownItemCheckbox: "dropdown-item-checkbox", // must be a unique class name or constellation of class names within the actionDropDown dropDownMenu: "dropdown btn-group", // must be a unique class name or constellation of class names within the actionDropDown dropDownMenuItems: "dropdown-menu pull-right", // must be a unique class name or constellation of class names within the actionDropDown dropDownMenuText: "dropdown-text", // must be a unique class name or constellation of class names within the actionDropDown footer: "bootgrid-footer container-fluid", header: "bootgrid-header container-fluid", icon: "icon glyphicon", iconColumns: "glyphicon-th-list", iconDown: "glyphicon-chevron-down", iconRefresh: "glyphicon-refresh", iconSearch: "glyphicon-search", iconUp: "glyphicon-chevron-up", infos: "infos", // must be a unique class name or constellation of class names within the header and footer, left: "text-left", pagination: "pagination", // must be a unique class name or constellation of class names within the header and footer paginationButton: "button", // must be a unique class name or constellation of class names within the pagination /** * CSS class to select the parent div which activates responsive mode. * * @property responsiveTable * @type String * @default "table-responsive" * @for css * @since 1.1.0 **/ responsiveTable: "table-responsive", right: "text-right", search: "search form-group", // must be a unique class name or constellation of class names within the header and footer searchField: "search-field form-control", selectBox: "select-box", // must be a unique class name or constellation of class names within the entire table selectCell: "select-cell", // must be a unique class name or constellation of class names within the entire table /** * CSS class to highlight selected rows. * * @property selected * @type String * @default "active" * @for css * @since 1.1.0 **/ selected: "active", sortable: "sortable", table: "bootgrid-table table" }, /** * A dictionary of formatters. * * @property formatters * @type Object * @for defaults * @since 1.0.0 **/ formatters: {}, /** * Contains all labels. * * @property labels * @type Object * @for defaults **/ labels: { all: "All", infos: "Showing {{ctx.start}} to {{ctx.end}} of {{ctx.total}} entries", loading: "Loading...", noResults: "No results found!", refresh: "Refresh", search: "Search" }, /** * Specifies the mapping between status and contextual classes to color rows. * * @property statusMapping * @type Object * @for defaults * @since 1.2.0 **/ statusMapping: { /** * Specifies a successful or positive action. * * @property 0 * @type String * @for statusMapping **/ 0: "success", /** * Specifies a neutral informative change or action. * * @property 1 * @type String * @for statusMapping **/ 1: "info", /** * Specifies a warning that might need attention. * * @property 2 * @type String * @for statusMapping **/ 2: "warning", /** * Specifies a dangerous or potentially negative action. * * @property 3 * @type String * @for statusMapping **/ 3: "danger" }, /** * Contains all templates. * * @property templates * @type Object * @for defaults **/ templates: { actionButton: "<button class=\"btn btn-default\" type=\"button\" title=\"{{ctx.text}}\">{{ctx.content}}</button>", actionDropDown: "<div class=\"{{css.dropDownMenu}}\"><button class=\"btn btn-default dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\"><span class=\"{{css.dropDownMenuText}}\">{{ctx.content}}</span> <span class=\"caret\"></span></button><ul class=\"{{css.dropDownMenuItems}}\" role=\"menu\"></ul></div>", actionDropDownItem: "<li><a data-action=\"{{ctx.action}}\" class=\"{{css.dropDownItem}} {{css.dropDownItemButton}}\">{{ctx.text}}</a></li>", actionDropDownCheckboxItem: "<li><label class=\"{{css.dropDownItem}}\"><input name=\"{{ctx.name}}\" type=\"checkbox\" value=\"1\" class=\"{{css.dropDownItemCheckbox}}\" {{ctx.checked}} /> {{ctx.label}}</label></li>", actions: "<div class=\"{{css.actions}}\"></div>", body: "<tbody></tbody>", cell: "<td class=\"{{ctx.css}}\" style=\"{{ctx.style}}\">{{ctx.content}}</td>", footer: "<div id=\"{{ctx.id}}\" class=\"{{css.footer}}\"><div class=\"row\"><div class=\"col-sm-6\"><p class=\"{{css.pagination}}\"></p></div><div class=\"col-sm-6 infoBar\"><p class=\"{{css.infos}}\"></p></div></div></div>", header: "<div id=\"{{ctx.id}}\" class=\"{{css.header}}\"><div class=\"row\"><div class=\"col-sm-12 actionBar\"><p class=\"{{css.search}}\"></p><p class=\"{{css.actions}}\"></p></div></div></div>", headerCell: "<th data-column-id=\"{{ctx.column.id}}\" class=\"{{ctx.css}}\" style=\"{{ctx.style}}\"><a href=\"javascript:void(0);\" class=\"{{css.columnHeaderAnchor}} {{ctx.sortable}}\"><span class=\"{{css.columnHeaderText}}\">{{ctx.column.text}}</span>{{ctx.icon}}</a></th>", icon: "<span class=\"{{css.icon}} {{ctx.iconCss}}\"></span>", infos: "<div class=\"{{css.infos}}\">{{lbl.infos}}</div>", loading: "<tr><td colspan=\"{{ctx.columns}}\" class=\"loading\">{{lbl.loading}}</td></tr>", noResults: "<tr><td colspan=\"{{ctx.columns}}\" class=\"no-results\">{{lbl.noResults}}</td></tr>", pagination: "<ul class=\"{{css.pagination}}\"></ul>", paginationItem: "<li class=\"{{ctx.css}}\"><a data-page=\"{{ctx.page}}\" class=\"{{css.paginationButton}}\">{{ctx.text}}</a></li>", rawHeaderCell: "<th class=\"{{ctx.css}}\">{{ctx.content}}</th>", // Used for the multi select box row: "<tr{{ctx.attr}}>{{ctx.cells}}</tr>", search: "<div class=\"{{css.search}}\"><div class=\"input-group\"><span class=\"{{css.icon}} input-group-addon {{css.iconSearch}}\"></span> <input type=\"text\" class=\"{{css.searchField}}\" placeholder=\"{{lbl.search}}\" /></div></div>", select: "<input name=\"select\" type=\"{{ctx.type}}\" class=\"{{css.selectBox}}\" value=\"{{ctx.value}}\" {{ctx.checked}} />" } });
5. API.
// adds new rows $("#grid").bootgrid('append', ROWS); // selects specific rows $("#grid").bootgrid('select', IDs); // deselects selected rows $("#grid").bootgrid('deselect', IDs); // removes rows $("#grid").bootgrid('remove', IDs); // searches in all visible columns for the given phrase. // if no argument is passed, it will reset the search. $("#grid").bootgrid('search', Phrase); // sorts rows by the given dictionary. // if no argument is passed, it will reset sorting. $("#grid").bootgrid('sort', dictionary); // removes all rows $("#grid").bootgrid('clear'); // reloads data $("#grid").bootgrid('reload'); // destroy the plugin $("#grid").bootgrid('destroy'); // gets column settings. $("#grid").bootgrid('getColumnSettings'); // gets the current page index $("#grid").bootgrid('getCurrentPage'); // gets the current rows $("#grid").bootgrid('getCurrentRows'); // gets a number represents the row count per page $("#grid").bootgrid('getRowCount'); // gets the search phrase $("#grid").bootgrid('getSearchPhrase'); // gets selected rows $("#grid").bootgrid('getSelectedRows'); // gets the sort dictionary which represents the state of column sorting $("#grid").bootgrid('getSortDictionary'); // gets a number represents the total page count $("#grid").bootgrid('getTotalPageCount'); // gets a number represents the total row count $("#grid").bootgrid('getTotalRowCount');
6. Events.
$("#grid").bootgrid({ // options here }) .on("load.rs.jquery.bootgrid", function (e){ // ... .on("loaded.rs.jquery.bootgrid", function (e){ // ... }); .on("appended.rs.jquery.bootgrid", function (e, appendedRows){ // ... }); .on("cleared.rs.jquery.bootgrid", function (e, affectedRows){ // ... }); .on("click.rs.jquery.bootgrid", function (e, columns, row){ // ... }); .on("selected.rs.jquery.bootgrid", function (e, selectedRows){ // ... }); .on("deselected.rs.jquery.bootgrid", function (e, deselectedRows){ // ... }); .on("initialize.rs.jquery.bootgrid", function (e){ // ... }); .on("initialized.rs.jquery.bootgrid", function (e, columns, row){ // ... }); .on("removed.rs.jquery.bootgrid", function (e, removedRows){ // ... });
This awesome jQuery plugin is developed by rstaib. For more Advanced Usages, please check the demo page or visit the official website.