0

I have a DataTable in my .NET Core application which has a checkbox column. I would like to be able to sort/order the table by checkbox value using the arrow buttons in the table header. In order to achieve this I have used the code from the DataTables Live DOM Ordering example here: https://datatables.net/examples/plug-ins/dom_sort.html

However, the column re-ordering does not work. If I inspect the elements I can see that there is something happening to the elements as they flash, however the order of the rows is not changing.

Here is the HTML:

    <table id="airportsTable" class="table table-striped table-bordered dt-responsive nowrap" width="100%" cellspacing="0">
        <thead>
            <tr>
                <th>IsoCode</th>
                <th>Name</th>
                <th>TimezoneName</th>
                <th>TimezoneStandardName</th>
                <th>
                    Required
                    <input type="checkbox" id="selectAllCheckbox" value="false" />
                </th>
            </tr>
        </thead>
        <tbody>
            @{ foreach (var airport in airportList) //Index , update after iteration, so that non-model data can be attached
                {
                    string iso = airportList[tableIndex].IsoCode; 
                    <tr>
                        <td>
                            <label id="isoCode">@airportList[tableIndex].IsoCode</label>
                        </td>
                        <td>
                            <label id="name">@airportList[tableIndex].Name</label>
                        </td>
                        <td>
                            <label id="timeZoneName">@airportList[tableIndex].TimeZoneName</label>
                        </td>
                        <td>
                            <label id ="timeZoneStandardName">@airportList[tableIndex].TimeZoneStandardName</label>
                        </td>
                        <td>
                            <input type="checkbox" asp-for="@airportList[tableIndex].Required" id="requiredCheckbox" onclick="requiredChanged(this, '@airportList[tableIndex].IsoCode' )" />
                        </td>
                    </tr>

                    tableIndex++;
                }
            }
        </tbody>
    </table>

And here is the JQuery:

$.fn.dataTable.ext.order['dom-checkbox'] = function  ( settings, col )
    {
        return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
            return $('input', td).prop('checked') ? '1' : '0';
        } );
    }

    $(document).ready(function () {
         var airportsTable = $('#airportsTable').DataTable({
            "pageLength": 50,
            "columns": [
                null,
                null,
                null,
                null,
                { "orderDataType": "dom-checkbox" }
            ]
        });

Any help would be greatly appreciated, TIA!

1 Answer 1

2

Add this to your table after your columns section:

"columnDefs": [ { "orderDataType": "dom-checkbox", targets: 5 } ]

https://datatables.net/reference/option/columns.orderDataType

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.