2016-06-30 12 views
1

Ich verwende das Kendo MVC-Raster, um Daten anzuzeigen. Ich muss die Daten basierend auf der URL filtern, auf die der Benutzer geklickt hat. Unten ist der Code für Kendo GitterKendo Datenquellenfilter funktioniert nicht wie erwartet

Ansicht

@(Html.Kendo().Grid<WebApplication2.ApplicationViewModel>() 
     .Name("grid") 
     .Columns(columns => 
     { 
      columns.Bound(c => c.ApplicationStatus).Width(150); 
      columns.Bound(c => c.StartDate).Width(150).Filterable(ftb => ftb.Cell(cell => cell.Operator("equals"))); 
      columns.Bound(c => c.EndDate).Width(150).Filterable(ftb => ftb.Cell(cell => cell.Operator("equals"))).Groupable(false);       
     }) 
       .HtmlAttributes(new { style = "height: 500px;width:100%" }) 
       .Groupable() 
     .Scrollable() 
     .Filterable(ftb => ftb.Mode(Kendo.Mvc.UI.GridFilterMode.Row)) // Filter Code 
     .Sortable() 
     .Pageable(pageable => pageable 
     .Refresh(true) 
     .PageSizes(true)) 
     .DataSource(dataSource => dataSource 
     .Ajax() 
     .ServerOperation(true) 
     .Read(read => read.Action("FetchData", "Home")) 
         .Filter(f => f.Add(p => p.ApplicationStatus).IsEqualTo(ViewBag.ApplicationStatus)) 
         .Filter(f => f.Add(p => p.StartDate).IsGreaterThanOrEqualTo(Convert.ToDateTime(ViewBag.FromDate))) 
         .Filter(f => f.Add(p => p.StartDate).IsLessThanOrEqualTo(Convert.ToDateTime(ViewBag.ToDate))) 
     .PageSize(KendoGridConstants.KendoGridDefaultPageSize) 
     ) 
    ) 

Controller-Code:

public ActionResult ApplicationGrid(string ApplicationStatus, string fromDate, string toDate) 
     {    
      ViewBag.ApplicationStatus = ApplicationStatus == null ? "All" : ApplicationStatus; 
      ViewBag.FromDate = fromDate == null ? DateTime.Now.ToShortDateString() : Convert.ToDateTime(fromDate).ToShortDateString(); 
      ViewBag.ToDate = toDate == null ? DateTime.Now.ToShortDateString() : Convert.ToDateTime(toDate).ToShortDateString(); 
      return View(); 
     } 

     public ActionResult FetchData([DataSourceRequest]DataSourceRequest request) 
     { 
      var applicationList = Dbcontext.ApplicationStatus; 
      return Json(applicationList.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); 
     } 

Wenn ich auf StartDate nur ein Filter halten es funktioniert gut, aber wenn ich beide halten Filter, es zeigt mir einige irrelevante Daten. Ich muss den Datumsbereich filtern. Jede andere Alternative ist auch in Ordnung.

Antwort

1

Ich weiß, das ist wirklich alt, aber ich hatte das gleiche Problem, konnte keine Dokumentation finden und landete wie immer auf Stack Overflow. Also trage ich meine Lösung bei.

Need auf der Datasource zusätzliche und/oder Betreiber der Filter-Anweisung hinzuzufügen:

.Read(read => read.Action("FetchData", "Home")) 
    .Filter(f => f.Add(p => p.StartDate).IsGreaterThanOrEqualTo(Convert.ToDateTime(ViewBag.FromDate))) 
     .And().IsLessThanOrEqualTo(Convert.ToDateTime(ViewBag.ToDate)))