Add checkbox to each row in datatable for selecting rows
Add checkbox to each row in datatable for selecting rows
madaan18
Posts: 4Questions: 0Answers: 0
Hi folks,
I was just wondering if i can have an extra column in my datatable which will contain checkboxes to select/deslect rows. I googled and found following 2 links, they are quite helpful but not exactly what i want.
http://datatables.net/release-datatables/examples/api/select_row.html
http://datatables.net/release-datatables/examples/api/form.html
Is there not any variable or api directly to have this feature. I want to have select all/deselect all option also in the header of table. Please guys tell me what is the best way to do so ?
Thanks $ Regards
Tarun Madaan
I was just wondering if i can have an extra column in my datatable which will contain checkboxes to select/deslect rows. I googled and found following 2 links, they are quite helpful but not exactly what i want.
http://datatables.net/release-datatables/examples/api/select_row.html
http://datatables.net/release-datatables/examples/api/form.html
Is there not any variable or api directly to have this feature. I want to have select all/deselect all option also in the header of table. Please guys tell me what is the best way to do so ?
Thanks $ Regards
Tarun Madaan
This discussion has been closed.
Replies
Allan
But in second link ( http://datatables.net/release-datatables/examples/api/form.html ) there are checkboxes and submit button which will give the selected rows. Can you please share that code? how to do so ?
Thanks $ Regards
Tarun Madaan
Here is a bit of sample code for you. Might help
[code]
{
// Targets column 8 (count from 0)
"aTargets":[8],
// Some styling
"fnCreatedCell": function(nTd, sData, oData, iRow, iCol)
{
$(nTd).css('text-align', 'center');
},
// Extra column where you want your link/add/delete/edit buttons or in your case check boxes
"mData": null,
"mRender": function( data, type, full) {
return '';
}
},
[/code]
If you intended to have one action per row, you can use the following code which gives the row id of clickacble row
[code]
// Gets you the row Id
var rowIndex = oTable.fnGetPosition($(this).closest('tr')[0]);
[/code]
In case you have multiple actions per row, use the following code
[code]
// Only column 8 is clickable
$("#example td:nth-child(8)").live("click", function () {});
[/code]
Also do not forget to use a class (not an ID since this should be unique) for checkboxes on each row and use .each to loop thru'
Hope this helps
As girishmr says, if you want to create input elements on-the-fly, then mRender is the way to do.
Allan
I have managed to create a working example of using dataTables with a .NET .aspx Webmethod that returns POST JSON Data from a form submission and populates a dynamic table. On the aspx page I have the table laid out as in your basic examples, including a for the "Select" column.
Here is my code as it is currently, including placement code similar to that listed above. It is not rendering a checkbox currently, but is rendering my row data, with all data rows shifted one column to the left. I want to inject the checkbox into column 0 and it should have a value = to "TaskID". First I want to get past rendering the checkbox, then I will deal with getting the checkbox value back on a button click later...
Here is my code:
[code]
$(document).ready(function () {
// Can't get this to work against data rows;
// discarding for now...
// $('#example tr').click(function () {
// $(this).toggleClass('row_selected');
// });
// var oTable = $('#example').dataTable();
$('input[id*=ParamButton]').click(function () {
var paramSearchURL = "MyPage.aspx/SearchViaParams";
var sUrl = "MyPage.aspx/SearchViaParams";
// disablePage(); // disabling for now while debugging
// showProgress(); // disabling for now while debugging
//Search Parameters to pass to web method...
var parameterCriteria1Field = $('select[id*="SearchParamCriteria1"]');
var parameterValue1Field = $('input[id*="SearchParamValue1"]');
var pageData = {
ParameterCriteria1: parameterCriteria1Field.val().toString(),
ParameterValue1: parameterValue1Field.val().toString(),
};
$('#example').dataTable({
"bProcessing": true,
"bDestroy": true, //this flag must be implemented -->
// to destroy and rebuild dataTable
//"bServerSide": true, //NOT USED IN CLICK -->
// WEBMETHOD JSON SCENARIO
"sAjaxSource": sUrl
"sAjaxDataProp": "", //EMPTY STRING is needed -->
// to handle .NET json "d.Tablename notation -->
// returned from WebMethod
"sServerMethod": "POST",
"fnServerData": function (sUrl, aoData, fnCallback, oSettings) {
oSettings.jqXHR = $.ajax({
"type": "POST",
"url": sUrl,
"dataType": "json", //NOT pjson!
"cache": false,
"contentType": "application/json; charset=utf-8",
// The following works with .NET Webmethods
"data": "{'items': '" + JSON.stringify(pageData) + "'}",
"success": function (json) {
fnCallback(json.d.Table);
},
"error": function (msg) {
alert(msg);
}
});
},
// Code below, above aoColumns, is non-working code -->
// trying to insert checkbox in first ordinal datarow position
"aTargets": [0],
// Some styling
"fnCreatedCell": function (nTd, sData, oData, iRow, iCol)
{
$(nTd).css('text-align', 'center');
},
// Extra column where you want your check boxes -->
// (I don't understand this...)
"mData": null,
"mRender": function( data, type, full) {
// I think this is correct code to add checkbox? -->
// Value should =TaskID
return '';
},
"aoColumns": [
{ "mDataProp": "TaskID" },
// more columns removed for brevity....
{ "mDataProp": "MessageData" }
]
}); //I removed a lot of JS below this, hope closing brackets are correct... ;)
});
});
[/code]
Thanks in advance for your help, and I hope the code above helps folks working in .NET. I tried to comment the code so the .NET folks will catch the subtle tricks to getting this scenario to work. I'd be happy to post a detailed how-to after this checkbox works if you would like me to...
"sAjaxSource": sUrl,
Line 27, 28 and 29 should read (including comments):
"sAjaxDataProp": "", //EMPTY STRING is needed -->
// to handle .NET json "d.Tablename" notation -->
// returned from WebMethod
Just FYI for those who may visit this later.
After much Googling, I ran across a thread where allan pointed out that as of 1.9.4 mDataProp and fnRender had been depricated, and instead you should use mData and mRender. So I made that switch, but more importantly, I was pointed to http://datatables.net/ref#mRender that had a nice bit of demo code at the bottom that I pasted into my code to get that first column to render. From there I played with it some more and with the following code I now get a checkbox, centered in every row at column 0 with a value I can use in later click events:
[code]
...
"aoColumns": [
{ "sClass": "center",
"mData": "TaskID",
"mRender": function (data, type, full) {
return '';
}
},
{"mData": "TaskID" },
...
[/code]
:)