Datetime-filter in kendo grid
Mein code ist in C# .NET
Ich bin mit Kendo-Grid version 2013.2.716.340-und server-binding zum anzeigen von Daten in grid.
In Kendo UI Grid, ich habe eine dateTime
Spalte jedoch die Spalte filter-Eingang hat nur ein date-picker, aber keine Zeit-picker. Aufgrund dieser, wenn ich die option IsEqualTo
und geben Sie ein Datum, dann bekomme ich null Ergebnisse wie die Zeit eingestellt ist 00:00:00
im filter, aber die Spalten haben einige Zeit Wert.
Ich möchte hinzufügen, time picker zusammen mit Datum-picker.
Ich versuchte dieses auf meiner Spalte, aber es hat nicht funktioniert:
columns.Bound(o => o.Time).Title("Time").Format("{0:MM/dd/yyyy HH:mm:ss}").Filterable(f => f.UI("DateTimeFilter")).Width("5%");
Und unten Drehbuch :
<script type="text/javascript">
function DateTimeFilter(control)
{
$(control).kendoDateTimePicker();
}
</script>
Der obige code funktioniert, wenn ich wählen Sie die genaue datetime
aus datetimepicker
aber es funktioniert nicht, wenn ich wählen Sie isequalto
.
ZB : Wenn ich in diesem datetime
"12/21/2013 07:15:45" angezeigt in meiner kendo-grid-Spalte und wenn ich kopieren Sie diese datetime
zu isequalto
option unter filter ist es nicht, gibt keine Daten.
Auch ich habe versucht, das Beispiel auf dieser link Es auch nicht in meinem Fall. Beispiel auf diesen link verwendet Ajax verbindlich. Ich muss es anwenden, im Fall von server-Bindung.
Dies ist ein Bild, dass zeigt, was ich möchte. Hier ist der link zum Bild.
Wenn ich kopieren Sie die datetime
im raster angezeigt, um den filter sollte-filter korrekt und geben das Ergebnis.
Ich werde sehr dankbar, wenn jemand mir helfen könnte in die Lösung meines Problems. Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus meiner Erfahrung, die kendoDateTimePicker wirklich pingelig; wenn das format der filter kann nicht angeben, wird das datetime-Genauigkeit der Spalte Daten, wird es nicht finden.
In Ihrem Fall, Ihre Spalte format ist
"MM/dd/yyyy HH:mm:ss"
(mit Sekunden). Das Standard-format für die kendoDateTimePicker ist"MM/dd/yyyy h:mm tt"
(ohne Sekunden-und Stunden-spec nicht). Da Sie initialisiert ein Standard-kendoDateTimePicker, egal, was Sie in der Farbauswahl, Sie konnte nie einen filter auf ein Datum, dasIS EQUAL TO
eine Spalte Wert, da Sie Sie konnte nicht geben Sie ein, wie viele Sekunden es war.Der einfachste Weg, um sicherzustellen, dass es funktioniert, ist, verwenden Sie das gleiche format für die Spalten und die kendoDateTimePicker . Ersetzen Sie Ihre
DateTimeFilter
Funktion mit dieser:Hinblick auf die kendoDateTimePicker:
format
definiert die input-Wert-format für die KontrolletimeFormat
definiert das format der Zeit-pickerinterval
(nicht verwenden Sie es oben), aber es gibt das Zeitintervall in Minuten zwischen jeder option des Zeit-picker.Ich bin nicht mit asp.net mvc, also ich bin mir nicht 100% sicher, ob dies Ihr problem löst. Aber ich bin sicher, es wird klar, bis zumindest einige der Filter-Fragen, die Sie haben. Ich kann ein jsfiddle für eine rein html/javascript-Beispiele, wenn Sie wollen.
Ich weiß, ich bin spät dran mit dieser Antwort, aber es könnte noch jemand helfen.
Ich denke, Sie erleben dies, weil der server-Seite
DateTime
Werte enthalten, in Sekundenbruchteilen Daten wie auch und dem ist-gleich-operator nicht ignoriert, Ihnen beim Vergleich. Ich fand es einfacher zu kommen mit einem server-side-Lösung anstelle von schreiben aller Art schmutziger JS-workarounds.Die Idee ist, dass jedesmal, wenn man einen filter in der
DataSourceRequest
Objekt, dass würde die filter in einemDateTime
Eigenschaft, die Sie manuell ersetzen Sie es mit einemCompositeFilterDescriptor
, die kürzt den Wert auf die gewünschte Präzision, legt es als untere Schranke, und fügt dann eine Einheit von der gewünschten Genauigkeit (Sek, min, Stunde, etc.) und legt es als Obere Schranke.Code ist der folgende:
Bemerkungen:
DateTime
truncater Erweiterung basiert auf diese Antwort.equals
, weil wenn Sie höher als oder dergleichen, die default-Verhalten wird genauso gut funktionieren.CompositeFilterDescriptor
s denn ein AusdruckdateToSearch = 2016-11-21 11:22:00 AND dateToSearch = 2016-11-21 11:59:00
keinen Sinn macht, sowieso.DateTimeOffset
Werte.Verbesserung Balázs' Antwort, dies setzt Voraus, dass Sie mit einem einfachen Datum-Teil von
DateTime
und kümmern sich nicht um die Zeit-Teil überhaupt. Es ist auch rekursiv zu behandeln gefiltert, mit anderen nicht verwandten Filter.