0

I am trying to filter data by date-range using jQuery on the client side but it is not doing it properly, It is showing me data (dummy) from the year 2065 and onwards (linked the Screen shot below). I have been trying for almost a week now but finally looks like I need some help on it.

Screen shot:

Here's my C# controller code for your inspection:

   DateTime StartDate = DateTime.MinValue;
   DateTime EndDate = DateTime.MaxValue;
        if (dateFilter.Contains('~'))
        {
            StartDate = dateFilter.Split('~')[0] == "" ? DateTime.MinValue : Convert.ToDateTime(dateFilter.Split('~')[0]);
            EndDate = dateFilter.Split('~')[1] == "" ? DateTime.MaxValue : Convert.ToDateTime(dateFilter.Split('~')[1]);
        }

        filteredTracks = filteredTracks
             .Where(c => (StartDate == DateTime.MinValue || StartDate <= c.Date)
                                              &&
                         (EndDate == DateTime.MaxValue || c.Date <= EndDate)
        ).OrderByDescending(i => i.Date).ToList();

Here's the jQuery client-side for your inspection:

var todayDate = new Date();
var endDate = todayDate.getDate() + '/' + (todayDate.getMonth() + 1) + '/' + todayDate.getFullYear();
var d = new Date();
var st = d.setDate(todayDate.getDate() - 75);
var startDate = d.getDate() + '/' + (d.getMonth() + 1) + '/' + d.getFullYear();
$('#startdateadmin-venue').val(startDate);
$('#enddateadmin-venue').val(endDate);

$('#filterStyle-venue').click(function () {
    $("#AdvancedfilterForm-venue").slideToggle(300);
});

$(function () {
    $("#startdateadmin-venue").datepicker({
        dateFormat: 'dd/mm/yy',
        changeMonth: true,
        changeYear: true
    });
});

$(function () {
    $("#enddateadmin-venue").datepicker({
        dateFormat: 'dd/mm/yy',
        changeMonth: true,
        changeYear: true
    });
});

$('#searchrecord-button').click(function (e) {
    e.preventDefault();
    var startDate = $('#startdateadmin-venue').val();
    var endDate = $('#enddateadmin-venue').val();

    $('#myDataTable').dataTable().fnDestroy();

    var oTable = $('#myDataTable').dataTable('load',{
        "oLanguage": {
            "sSearch": " "
        },
        "bAutoWidth": false,
        "sAjaxSource": "AjaxHandler_datesrange",
        "bServerSide": true,
        "bProcessing": false,
        "sScrollY": "333",
        "iDisplayLength": 300,
        "bPaginate": true,
        "bRetrieve": true,
        "bDestroy": true,
        "sPaginationType": "full_numbers",
        "aoColumns": [
    { "mData": "TrackID", "sWidth": "1%" },
    {
        "mData": "Date", "bSortable": false, "sWidth": "1%",
        "fnRender": function (obj, val) {
            var dx = new Date(parseInt(val.substr(6)));
            var dd = dx.getDate();
            var mm = dx.getMonth() + 1;
            var yy = dx.getFullYear();

            if (dd <= 9) {
                dd = "0" + dd;
            }
            if (mm <= 9) {
                mm = "0" + mm;
            }
            return dd + "/" + mm + "/" + yy;
        }
    },
    { "mData": "TrackName", "sWidth": "43%" },
    { "mData": "ArtistName", "sWidth": "30%" },
    { "mData": "Times", "sWidth": "1%" }
        ]
    });      
});

EDIT: Controller code: GetsData from an Excel File:

public static List<TopPlayed> GetTracks()
        {
            if (TrackData == null)
            {
                string Path = @"C:\\5Newwithdate-6r.xls";
                OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= '" + Path + "';Extended Properties=" + (char)34 + "Excel 8.0;IMEX=1;" + (char)34 + "");
                OleDbDataAdapter da = new OleDbDataAdapter("select * from [Sheet1$]", con);
                con.Close();
                System.Data.DataTable data = new System.Data.DataTable();
                da.Fill(data);
                List<TopPlayed> daa = new List<TopPlayed>();
                TrackData = new List<TopPlayed>();
                foreach (DataRow p in data.Rows)
                {
                    TopPlayed top = new TopPlayed()
                    {
                        TrackID = Convert.ToInt32(p.Field<double>("TrackID")),
                        Date = p.Field<DateTime>("DateTimes"),
                        TrackName = p.Field<string>("TrackName"),
                        ArtistName = p.Field<string>("ArtistName"),
                        Times = Convert.ToInt32(p.Field<double>("Times"))
                    };

                    TrackData.Add(top);
                }
            }

            return TrackData;

        }

EDIT: Controller code: Filtering: All the filtering works apart from Dates

public ActionResult AjaxHandler_datesrange(jQueryDataTableParamModel param)
    {
        var allTracks = DataRepository.GetTracks();
        IEnumerable<TopPlayed> filteredTracks;

        var dateFilter = Convert.ToString(Request["sSearch_1"]);
        var trackFilter = Convert.ToString(Request["sSearch_2"]);
        var artistFilter = Convert.ToString(Request["sSearch_3"]);

        // Search Filter
        if (!string.IsNullOrEmpty(param.sSearch))
        {
            var isTrackSearchable = Convert.ToBoolean(Request["bSearchable_1"]);
            filteredTracks = DataRepository.GetTracks()
                .Where(c => isTrackSearchable && c.TrackName.ToLower().Contains(param.sSearch.ToLower()));
        }
        else
        {
            filteredTracks = allTracks;
        }

        // Dates
        DateTime StartDate = DateTime.MinValue;
        DateTime EndDate = DateTime.MaxValue;
        if (dateFilter.Contains('~'))
        {
            StartDate = dateFilter.Split('~')[0] == "" ? DateTime.MinValue : Convert.ToDateTime(dateFilter.Split('~')[0]);
            EndDate = dateFilter.Split('~')[1] == "" ? DateTime.MaxValue : Convert.ToDateTime(dateFilter.Split('~')[1]);
        }

        filteredTracks = filteredTracks
             .Where(c => (StartDate == DateTime.MinValue || StartDate <= c.Date)
                                              &&
                         (EndDate == DateTime.MaxValue || c.Date <= EndDate)
        ).OrderByDescending(i => i.Date).ToList();

        // Sorting
        var sortColumnIndex = Convert.ToInt32(Request["iSortCol_0"]);
        var isNameSortable = Convert.ToBoolean(Request["bSortable_1"]);
        var isAddressSortable = Convert.ToBoolean(Request["bSortable_2"]);
        Func<TopPlayed, string> orderingFunction = (c => sortColumnIndex == 1 && isNameSortable ? c.TrackName :
                                                         sortColumnIndex == 2 && isAddressSortable ? c.ArtistName :
                                                         "");
        var sortDirection = Request["sSortDir_0"]; // asc or desc
        if (sortDirection == "asc")
            filteredTracks = filteredTracks.OrderBy(orderingFunction);
        else
            filteredTracks = filteredTracks.OrderByDescending(orderingFunction);

        // Paging
        var displayedTracks = filteredTracks.Skip(param.iDisplayStart).Take(param.iDisplayLength);

        return Json(new
        {
            sEcho = param.sEcho,
            iTotalRecords = allTracks.Count(),
            iTotalDisplayRecords = filteredTracks.Count(),
            aaData = displayedTracks
        },
                    JsonRequestBehavior.AllowGet);
    }

Any help would be great and thanks for your time.

1 Answers1

0

Lets Try below for Linq.

DateTime startDate = Model.startdate;
DateTime endDate = Model.enddate;

var queryListOnly = from i in datacontext.yourtable
                     where i.yourdatefield > startDate && i.yourdatefield < endDate
                     select i;

If you are using any jquery plugin then let me know so I can help on that way.

EDIT

just change dates section with this

filteredTracks = filteredTracks.Where(i => i.Date > startDate && i.Date < endDate).tolist();
MSTdev
  • 4,507
  • 2
  • 23
  • 40
  • thanks for that @Imran - I tried what you suggested but it didn't work. I am getting Data from an Excel file and using jQuery DataTables Plugin. Do you want me to update my full `Controller` code above? – user3679123 Jun 03 '14 at 10:28
  • I have editied my post above for your detailed inspection :) thanks again @Imran :) – user3679123 Jun 03 '14 at 10:33
  • Hey, thanks @Imran - the issue still hasn't been resolved, Sorry. I tried what you suggested but it still gives me data from the year 2066. If the `Controller` is fine then could this be the `Client-Side jQuery` that is messing it up? I'm checking what's happening their but could you please assist? thanks again @Imran for you help and time :) – user3679123 Jun 03 '14 at 13:24