Bonjour à tous.
Je ne rencontre pas vraiment de difficulté, mais étant débutant dans la manipulation de base de données, j'aimerai avoir vos observations sur la réalisation suivante :
Dans une fiche, je remplis un TTreeview à partir d'une base de donnée à laquelle j'ai accès via les composants ADO.
La table à partir de laquelle le Treeview est rempli contient notamment trois champs :
- NumAuto (Clé primaire)
- Nom (Nom affiché dans le Treeview)
- Ordre (Ordre dans lequel l'affichage est fait dans le treeview)
Lors de la sélection d'un élément du Treeview, les valeurs de tous les champs sont affichés dans des DBEdit.
La fiche contient également deux boutons permettant de monter ou descendre le nœud sélectionné dans le Treeview.
Le but est de mettre à jour la table lors du déplacement des nœuds du Treeview en modifiant le champ Ordre.
Par exemple, j'ai les valeurs suivantes contenant l'ordre suivant :
A | 1
B | 2
C | 3
Si je sélectionne le deuxième élément (B) et que je le déplace vers le haut, ma table doit alors être mise à jour ainsi qu'il suit :
B | 1
A | 2
C | 3
J'arrive à faire tout cela, mais je me demande si ma conception est convenable. Merci de me faire part de vos avis sur les deux points suivants :
1° - Pour savoir à quel élément de la table correspond le nœud sélectionné dans le Treeview, j'affecte lors du remplissage du Treeview à chaque Node.Data la valeur contenu dans le champs NumAuto :
Puis lors de la sélection d'un nœud du treeview, je me déplace dans le recordset en récupérant la valeur du data :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 NewNode.Data:=pointer(strtoint(MyQuery.FieldValues['NumAuto']));
2° - Pour remplir le Trreview à partir de la basse de donnée, j'ai recours aux composant ADO suivants :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SelectedID:=integer(MyTreeView.Selected.Data); MyDataSource.DataSet.Locate('NumAuto',SelectedID,[loCaseInsensitive])
TADOConnection (Pour me connecter à la base de donnée)
TADOTable (Pour indiquer la table contenant les valeurs à afficher)
TADOQuery (Pour sélectionner les éléments de la tables à afficher)
TdataSource (Je sais pas trop à quoi çà sert mais j'ai ai besoin pour utiliser le TADOQuery, et pour faire des recherches)
Après le déplacement d'un des nœuds du treeview au moyen de la fonction MyNode.MoveTo, il convient de mettre à jour deux valeurs du champs ordre : Celui du nœud déplacé, et celui étant affecté par le déplacement.
Pour cela, je procède ainsi qu'il suit :
Merci d'avance pour vos remarques et critiques, et notamment, de l'utilisation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 MyDataSource.DataSet.Locate('NumAuto',integer(NodeRicochet.Data),[loCaseInsensitive]) MyDataSource.DataSet.Edit; MyDataSource.DataSet.FieldByName('Ordre').Value:=OrdreAncien; MyDataSource.DataSet.UpdateRecord; MyDataSource.DataSet.Locate('NumAuto',integer(NodeToMove.Data),[loCaseInsensitive]) MyDataSource.DataSet.Edit; MyDataSource.DataSet.FieldByName('Ordre').Value:=OrdreNouveau; MyDataSource.DataSet.UpdateRecord;
- Du Data du nœud pour connaître à quel enregistrement de la base de donnée correspond l'élément sélectionné dans le Treeview
- De la fonction Locate pour se positionner sur l'enregistrement souhaité et de l'utilisation du composant DataSource pour modifier les valeurs.
A+
Partager