0
votes

I am trying to add a server side datatable implementation with date range filter. The filter does not filter any data. I have no idea where it is breaking. need your help in figuring out where I am going wrong.

here is the script.


    $(document).ready(function() {
                    'use strict';
                    var dataTable = $('#employee-grid').DataTable({
                        "processing": true,
                        "serverSide": true,
                        "sScrollY": "300px",
                        "iDisplayLength": 25,
                        "bJQueryUI": true,
                        "bStateSave": true,
                        "ajax": {
                            url: "employee-grid-data.php", // json datasource
                            type: "post", // method  , by default get
                            error: function() { // error handling
                                $(".employee-grid-error").html("");
                                $("#employee-grid").append('No data found in the server');
                                $("#employee-grid_processing").css("display", "none");

                            }
                        },
                        "tableTools": {
                            "sSwfPath": "swf/copy_csv_xls_pdf.swf",
                            "aButtons": [

                                {
                                    "sExtends": "collection",
                                    "sButtonText": "Export",
                                    "aButtons": ["csv", "xls", "pdf", "print"]
                                }
                            ]
                        }
                    });
                    function myCustomFilterFunction(filterVal, columnVal) {
                        var found;
                        if (columnVal === '') {
                            return true;
                        }


                        if (found !== -1) {
                            return true;
                        }
                        return false;
                    }
                    var oTable = $('#employee-grid').dataTable().yadcf([{
                        column_number: 0,
                        filter_container_id: 'external_filter_container_0',
                        filter_type: "auto_complete",
                        text_data_delimiter: ","
                    }, {
                        column_number: 1,
                        filter_container_id: 'external_filter_container_1',
                        filter_type: "auto_complete",
                        text_data_delimiter: ","
                    }, {
                        column_number: 2,
                        filter_container_id: 'external_filter_container_2',
                        filter_type: "auto_complete",
                        text_data_delimiter: ","
                    }, {
                        column_number: 3,
                        filter_container_id: 'external_filter_container_3',
                        filter_type: 'range_date',
                        date_format: 'mm/dd/yyyy'
                    }, {
                        column_number: 4,
                        filter_container_id: 'external_filter_container_4',
                        data: [{
                            value: '1',
                            label: 'Yessss :)'
                        }, {
                            value: '0',
                            label: 'Noooo :('
                        }],
                        filter_default_label: "Select Yes/No"
                    }], {
                        externally_triggered: true
                    });






                });

And Here is the Html

<div class="container">

          <div id="externaly_triggered_wrapper" class="">
            <div>
                <span>First name:</span>
                <span id="external_filter_container_0"></span>
            </div>
            <div>
                <span>Last name:</span>
                <span id="external_filter_container_1"></span>
            </div>
            <div>
                <span>Email:</span>
                <span id="external_filter_container_2"></span>
            </div>
            <div>
                <span>Date Filter:</span>
                <span id="external_filter_container_3"></span>
            </div>
            <div>
                <span>Newsletter:</span>
                <span id="external_filter_container_4"></span>
            </div>
          </div>
          <div id="externaly_triggered_wrapper-controls">
            <div>
                <input type="button" onclick="yadcf.exFilterExternallyTriggered(oTable);" value="Filter" class="some_btn general_btn">
                <input type="button" onclick="yadcf.exResetAllFilters(oTable);" value="Reset" class="some_btn general_btn">
            </div>
          </div>    
        <div class="container" style="width:760px !important;">
            <table id="employee-grid"  cellpadding="0" cellspacing="0" border="0" class="display" width="100%">
                    <thead>
                        <tr>
                            <th>First Name</th>
                            <th>Last name</th>
                            <th>Email</th>
                            <th>Date added</th>
                            <th class="ui-state-default" role="columnheader" tabindex="0" aria-controls="example1" rowspan="1" colspan="1" aria-label="Yes / No: activate to sort column ascending" style="width: 235px;">
                                <div class="DataTables_sort_wrapper" style="display: inline-block;">Yes / No<span class="DataTables_sort_icon css_right ui-icon ui-icon-carat-2-n-s"></span></div>
                                <div id="yadcf-filter-wrapper--example1-2" class="yadcf-filter-wrapper">
                                    <select id="yadcf-filter--example1-2" class="yadcf-filter " onchange="yadcf.doFilter(this, '-example1', 2, 'contains');" onkeydown="yadcf.preventDefaultForEnter(event);" onmousedown="yadcf.stopPropagation(event);" onclick="yadcf.stopPropagation(event);">
                                        <option value="-1">Select Yes/No</option>
                                        <option value="Yes">Yessss :)</option>
                                        <option value="No">Noooo :(</option>
                                    </select>
                                    <button type="button" id="yadcf-filter--example1-2-reset" onmousedown="yadcf.stopPropagation(event);" onclick="yadcf.stopPropagation(event);yadcf.doFilter('clear', '-example1', 2); return false;" class="yadcf-filter-reset-button ">x</button>
                                </div>
                            </th>
                        </tr>
                    </thead>

            </table>
        </div>
1
How are you passing the date range parameters to the server-side code?markpsmith
It is been generated by javascript. i am using this example yadcf-showcase.appspot.com/dom_source_externally_triggered.html and this has been in their javascript page. Here is the js file which has a case for from and to date which passes to serverside github.com/vedmack/yadcf/blob/master/jquery.dataTables.yadcf.jsSyed Mudabbir

1 Answers

0
votes

On the server side, the search text you get for a range_date has a delimiter in it, e.g.:

01/05/2017-yadcf_delim-20/05/2017

So you have to split it using something like:

searchText.Split(new string[] { "-yadcf_delim-" }, StringSplitOptions.None)