Le tri d'un dataview et son utilisation

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 718 fois - Téléchargée 28 fois

Contenu du snippet

Bonjour,

J'ai une base de données avec une table contenant des dates au format string et non date, et je ne peux pas changer le format
Pour travailler, j'utilise un dataset, auquel j'ai ajouté une colonne DateR au format date qui contient les dates formatées en date

Source / Exemple :


'Connexion et remplissage du dataset
Dim sSql As String
sSql = "Select * From maTable"
Dim mAdap As New OdbcDataAdapter(sSql, OdbcConn)
Dim sqlBuilder As OdbcCommandBuilder = New OdbcCommandBuilder(mAdap)

Dim mDSet As New DataSet
mAdap.Fill(mDSet)

'ajout d une colonne DateR qui represente la date au format de date et non au format string

Dim mNewCol As DataColumn = mDSet.Tables(0).Columns.Add("dateR", GetType(Date), "")

'conversion de la date string jj-mm-aaaa au format date avec la méthode convChaineToDate
'remplissage de la colonne associee dateR
Dim iIndex As Int32 = mDSet.Tables(0).Columns.IndexOf("Date")
Dim mLin As DataRow
For Each mLin In mDSet.Tables(0).Rows
Dim newDate As Date = convChaineToDate(mLin(iIndex))
mLin.Item("DateR") = newDate
Next

'creation d un dataView pour trier la table MaTable
'par odre croissant des dates réelles = dateR

mDSet.Tables(0).DefaultView.Sort = "dateR ASC"
mDSet.AcceptChanges()
vueTriee = mDSet.Tables(0).DefaultView

'Ensuite j'ai une méthode qui lie cette dataView vueTriee
'Justement pour lire une dataView triée il faut utiliser 
DataRowView et non DataRow
Car avec dataRow on lit la dataView non triée

ex pour lire la colonne dateR, 

Dim nbRows As Int32 = vueTriee.Table.Rows.Count()
Dim unrow As DataRowView
Dim dDate As Date

For i = 0 To nbRows - 1
unrow = vueTriee.Item(i)
dDate = row.Item("dateR")
Next

'ou une autre colonne
val = row.Item("Nom colonne")

A voir également

Ajouter un commentaire

Commentaires

Messages postés
91
Date d'inscription
dimanche 18 août 2002
Statut
Membre
Dernière intervention
21 février 2015

Au moins, c'est sympa de s'intéresser à la question.
Pour le moment je n'ai rien compris en lisant, mais c'est peut-être normal :)
Demain ou après-demain je vais tâcher de me réimprégner du problème, histoire de voir ce qu'apporte cette liaison.
Messages postés
1
Date d'inscription
dimanche 19 mars 2006
Statut
Membre
Dernière intervention
20 mars 2012

Bonjour,

Effectivement je suis d'accord avec JoBleu.

Bon j'ai eu le même problème que vous et j'ai enfin trouvé la solution, (c'est peut être pas la meilleur mais ça fonctionne) :
J'ai 2 bases de données différentes avec 2 tables identiques :
je monte les 2 tables dans 2 DataSet
DS1 et DS2

On fusion les 2 DataSet par la commande :
ds1.merge(ds2)

Maintenant j'ai un problème de tri de données dans le DataSet. Pour régler le problème je crée un nouveau DataSet DS3 dans le quel je copie les données triées :
ds3.merge(ds1.Tables(0).Select("", "mon_champ_à_trier ASC"))

Maintenant mon DataSet DS3 a toute les données triées.

+
Messages postés
91
Date d'inscription
dimanche 18 août 2002
Statut
Membre
Dernière intervention
21 février 2015

Ce n'est pas très sympa de laisser cette page en plan.
Elle est bien référencée, alors qu'elle n'apporte rien.
Cinq ans plus tard je cherche comment trier une liste avec un DataView, alors fatalement je tombe ici où je perds mon temps. Personne n'a jugé utile de confirmer à ManuAntibes que DataTable.DefaultView retourne une DataView, et ceci illustre le fond du problème : personne n'a jamais cherché à faire tourner ce code avant de le publier, sinon le compilateur aurait dit stop.
Messages postés
487
Date d'inscription
mardi 24 octobre 2000
Statut
Membre
Dernière intervention
23 mars 2019
3
Salut

Comment déclarer "vueTriee" ???

dim vueTriee as ???

Merci

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.