Comment utiliser les cases à cocher dans un DBGrid
Images tétra/Getty Images
Il existe de nombreuses façons et raisons de personnaliser la sortie d'unDBGriddans Delphes . Une façon consiste à ajouter des cases à cocher pour que le résultat soit visuellement plus attrayant.
Par défaut, si vous avez un champ booléen dans votre jeu de données, le DBGridles affichecomme 'True' ou 'False' selon la valeur du champ de données. Cependant, cela semble beaucoup mieux si vous choisissez d'utiliser un contrôle de case à cocher 'vrai' pour permettre la modification des champs.
Créer un exemple d'application
Démarrez un nouveau formulaire dans Delphi et placez un TDBGrid, TADOTable et TADOConnection, TDataSource.
Laissez tous les noms de composants tels qu'ils sont lorsqu'ils ont été déposés pour la première fois dans le formulaire (DBGrid1, ADOQuery1, AdoTable1, etc.). Utilisez l'inspecteur d'objets pour définir une propriété ConnectionString du composant ADOConnection1 (TADOConnection) pour qu'elle pointe vers l'exemple de base de données QuickiesContest.mdb MS Access.
Connectez DBGrid1 à DataSource1, DataSource1 à ADOTable1 et enfin ADOTable1 à ADOConnection1. La propriété ADOTable1 TableName doit pointer vers la table Articles (pour que le DBGrid affiche les enregistrements de la table Articles).
Si vous avez correctement défini toutes les propriétés, lorsque vous exécutez l'application (étant donné que la propriété Active du composant ADOTable1 est True), vous devriez voir, par défaut, le DBGrid afficher la valeur du champ booléen comme 'True' ou 'False' selon sur la valeur du champ de données.
Case à cocher dans un DBGrid
Pour afficher une case à cocher dans une cellule d'un DBGrid, nous devrons en mettre une à notre disposition au moment de l'exécution.
Sélectionnez la page 'Contrôles des données' sur lePalette de composantset choisissez un Case à cocher TDB . Déposez-en un n'importe où sur le formulaire - peu importe où, car la plupart du temps, il sera invisible ou flottant au-dessus de la grille.
Pointe: TDBCheckBox est un contrôle sensible aux données qui permet à l'utilisateur de sélectionner ou de désélectionner une seule valeur, ce qui est approprié pour les champs booléens.
Ensuite, définissez sa propriété Visible sur False. Remplacez la propriété Color de DBCheckBox1 par la même couleur que DBGrid (afin qu'elle se confond avec DBGrid) et supprimez Caption.
Plus important encore, assurez-vous que DBCheckBox1 est connecté à DataSource1 et au champ correct.
Notez que toutes les valeurs de propriété de DBCheckBox1 ci-dessus peuvent être définies dans l'événement OnCreate du formulaire comme ceci :
|__+_|
Ce qui vient ensuite est la partie la plus intéressante. Lors de la modification du champ booléen dans le DBGrid, nous devons nous assurer que le DBCheckBox1 est placé au-dessus ('flottant') de la cellule dans le DBGrid affichant le champ booléen.
Pour le reste des cellules (non ciblées) portant les champs booléens (dans la colonne 'Gagnant'), nous devons fournir une représentation graphique de la valeur booléenne (Vrai/Faux). Cela signifie que vous avez besoin d'au moins deux images pour dessiner : une pour l'état coché (valeur True) et une pour l'état non coché (valeur False).
Le moyen le plus simple d'y parvenir consiste à utiliser la fonction Windows API DrawFrameControl pour dessiner directement sur le canevas de DBGrid.
Voici le code du gestionnaire d'événements OnDrawColumnCell de DBGrid qui se produit lorsque la grille doit peindre une cellule.
|__+_|Pour terminer cette étape, nous devons nous assurer que DBCheckBox1 est invisible lorsque nous quittons la cellule :
|__+_|Nous n'avons besoin que de deux autres événements à gérer.
Notez qu'en mode édition, toutes les frappes vont à la cellule du DBGrid, nous devons nous assurer qu'elles sont envoyées au CheckBox. Dans le cas d'une CheckBox, nous nous intéressons principalement aux touches [Tab] et [Espace]. [Tab] doit déplacer le focus d'entrée vers la cellule suivante et [Espace] doit basculer l'état de la case à cocher.
|__+_|Il peut être approprié que la légende de la case à cocher change lorsque l'utilisateur coche ou décoche la case. Notez que le DBCheckBox a deux propriétés (ValueChecked et ValueUnChecked) utilisées pour spécifier la valeur de champ représentée par la case à cocher lorsqu'elle est cochée ou décochée.
Cette propriété ValueChecked contient 'Oui, un gagnant !', et ValueUnChecked est égal à 'Pas cette fois'.
|__+_|Exécutez le projet et vous verrez les cases à cocher partout dans la colonne du champ Gagnant.