Datetime filtre dans la grille de kendo
Mon code est en C# .NET
Je suis à l'aide de Kendo Grille version 2013.2.716.340 et de liaison de serveur pour afficher les données dans la grille.
En Kendo UI Grille, j'ai un dateTime
colonne, mais la colonne de filtre à l'entrée dispose d'un sélecteur de date mais pas le temps de sélecteur. Pour cette raison, si je choisis l'option IsEqualTo
et donner une date puis-je obtenir des résultats nuls comme l'heure est au 00:00:00
dans le filtre, mais les colonnes ont une certaine valeur de temps.
Je veux ajouter de temps de sélecteur avec sélecteur de date.
J'ai essayé de le faire sur ma colonne, mais il ne fonctionne pas:
columns.Bound(o => o.Time).Title("Time").Format("{0:MM/dd/yyyy HH:mm:ss}").Filterable(f => f.UI("DateTimeFilter")).Width("5%");
Et ont appliqué script ci-dessous :
<script type="text/javascript">
function DateTimeFilter(control)
{
$(control).kendoDateTimePicker();
}
</script>
Le code ci-dessus fonctionne lorsque je sélectionne exacte datetime
de datetimepicker
mais il ne fonctionne pas lorsque je sélectionne isequalto
.
Pour exemple : Si j'ai cette datetime
"12/21/2013 07:15:45" affiché dans mon kendo colonne de la grille et quand je copie ce datetime
à isequalto
en vertu de l'option de filtre, il ne donne pas toutes les données.
Aussi j'ai essayé l'exemple fourni sur ce lien Elle aussi n'a pas fonctionné dans mon cas. Exemple sur ce lien utilise Ajax de liaison. J'ai besoin de l'appliquer en cas de liaison de serveur.
C'est une image attachée, qui montre ce que je veux appliquer. Ici est le lien pour l'image.
Si je copie le datetime
affichés dans la grille du filtre, Il est important de filtrer correctement et donner le résultat.
Je serai très reconnaissant si quelqu'un pouvait m'aider dans la résolution de mon problème. Merci à l'avance.
Vous devez vous connecter pour publier un commentaire.
De mon expérience, le kendoDateTimePicker est vraiment pointilleux; si le format du filtre ne peut pas spécifier la date de la précision des données de la colonne, il ne le trouvera pas.
Dans votre cas, votre format de colonne est
"MM/dd/yyyy HH:mm:ss"
(avec les secondes). Le format par défaut pour l'kendoDateTimePicker est"MM/dd/yyyy h:mm tt"
(sans les secondes et les heures de spec incompatibles). Depuis que vous avez initialisé par défaut kendoDateTimePicker, peu importe ce que vous mettez dans le sélecteur, vous ne pourriez jamais filtre à une date quiIS EQUAL TO
une colonne de valeur, car on ne pouvait pas l'entrée combien de secondes qu'il a été.La meilleure façon de s'assurer qu'il fonctionne est d'utiliser le même format pour la colonne et le kendoDateTimePicker . Remplacer votre
DateTimeFilter
fonction avec ceci:En ce qui concerne la kendoDateTimePicker:
format
définit la valeur d'entrée de format pour le contrôletimeFormat
définit le format de l'heure de l'heure sélecteurinterval
(ne pas utiliser au-dessus), mais il spécifie l'intervalle de temps en minutes entre chaque option de l'heure sélecteur.Je ne suis pas à l'aide de asp.net mvc, donc je ne suis pas sûr à 100% si cela résout votre problème. Cependant, je suis certain qu'il sera clair à au moins une partie du filtrage des questions que vous avez. Je peux fournir un jsfiddle pour un simple html/javascript de l'échantillon si vous le souhaitez.
Je sais je suis en retard de cette réponse, mais ça peut aider quelqu'un.
Je suppose que vous rencontrez, car votre côté serveur
DateTime
valeurs contiennent des fractions de seconde de données et de l'opérateur = ne pas les ignorer lors de la comparaison. Je trouve qu'il est plus facile de venir avec une solution côté serveur, au lieu d'écrire toute sorte de sale JS solutions de contournement.L'idée est que chaque fois que vous trouvez un filtre dans le
DataSourceRequest
objet qui permettrait de filtrer sur unDateTime
de la propriété, vous remplacez manuellement avec unCompositeFilterDescriptor
, qui tronque la valeur de la précision souhaitée, définie comme la limite inférieure, puis ajoute une unité de la précision souhaitée (sec, min, heure, etc.) et le définit comme la limite supérieure.Le code est le suivant:
Remarques:
DateTime
truncater extension est basée sur cette réponse.equals
, parce que si vous sélectionnez Est plus tard ou similaire, le comportement par défaut fonctionnera tout aussi bien.CompositeFilterDescriptor
s becasue une expressiondateToSearch = 2016-11-21 11:22:00 AND dateToSearch = 2016-11-21 11:59:00
n'a aucun sens de toute façon.DateTimeOffset
valeurs.Une amélioration de Balázs réponse, cela suppose que vous êtes à l'aide d'une simple partie date de
DateTime
et ne se soucient pas de la partie heure à tous. Il est également récursive d'être filtré avec d'autres sans rapport avec les filtres.