Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Trie sur date verifier que c'est bien une valeur date VB.NET ?

2 réponses
Avatar
fabien_liteon
Bonjour,

J'essai un trie sur une colonne de de date cela fonctionne bien si toute la colonne ne reçoit que des valeurs (date) mais s'il y'a un autre type (strings), ça ne trie plus.

Comment faire pour que cela fonctionne dans tout les cas ?
Exemple si dans la colonne j'ai un string, faire croire au programme que c'est une valeur date "00/00/0000" <-- doit correspondre aux autres formats dans cette même colonne.
Ce que j'ai fais mais pas fonctionnel si anomalie.


Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
Try
Dim NbStrX, NbStrY As String
NbStrX = CType(x, XPSubItem).Text
NbStrY = CType(y, XPSubItem).Text
Dim time1 As DateTime = DateTime.Parse(CType(NbStrX, DateTime))
Dim time2 As DateTime = DateTime.Parse(CType(NbStrY, DateTime))
Return time1.CompareTo(time2)
Catch
End Try
End Function


Merci

2 réponses

Avatar
Laurent Jordi \(www.ezlogic.mc\)
If isDate(MaDate) non ?
"fabien_liteon" a écrit dans le message de
news:%
Bonjour,

J'essai un trie sur une colonne de de date cela fonctionne bien si toute


la colonne ne reçoit que des valeurs (date) mais s'il y'a un autre type
(strings), ça ne trie plus.

Comment faire pour que cela fonctionne dans tout les cas ?
Exemple si dans la colonne j'ai un string, faire croire au programme que


c'est une valeur date "00/00/0000" <-- doit correspondre aux autres formats
dans cette même colonne.
Ce que j'ai fais mais pas fonctionnel si anomalie.


Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer


Implements System.Collections.IComparer.Compare
Try
Dim NbStrX, NbStrY As String
NbStrX = CType(x, XPSubItem).Text
NbStrY = CType(y, XPSubItem).Text
Dim time1 As DateTime = DateTime.Parse(CType(NbStrX, DateTime))
Dim time2 As DateTime = DateTime.Parse(CType(NbStrY, DateTime))
Return time1.CompareTo(time2)
Catch
End Try
End Function


Merci


Avatar
Zoury
Salut! :O)

Comment faire pour que cela fonctionne dans tout les cas ?



Pourquoi ne pas t'assurer que ta colonne ne contient pas toujours le même
type au moment de l'ajout des données ? Il me semble anormal qu'une colonne
puisse contenir deux types différents..

pour utiliser la solution proposée par Laurent :
'***
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer
Implements System.Collections.IComparer.Compare
If (Not IsDate(x) OrElse Not IsDate(y)) Then
Throw New InvalidCastException
End If
Return CType(x, System.DateTime).CompareTo(CType(y, System.DateTime))
End Function
'***

ou encore celle-ci, qui, je crois, serait plus légère :
'***
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer
Implements System.Collections.IComparer.Compare
If (Not IsDate(x) OrElse Not IsDate(y)) Then
Throw New InvalidCastException
End If
Return DirectCast(x, System.IComparable).CompareTo(DirectCast(y,
System.IComparable))
End Function
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic Classique
Le français se refait une beauté, parlons en :
http://www.orthographe-recommandee.info/