Liste déroulante à l'intérieur d'un DBGrid

Voici comment placer une liste de sélection déroulante dans un DBGrid. Créez des interfaces utilisateur visuellement plus attrayantes pour modifier les champs de recherche dans un DBGrid - en utilisant la propriété PickList d'une colonne DBGrid.

Maintenant que vous savez ce que sont les champs de recherche et quelles sont les options d'affichage d'un champ de recherche dans Delphesde DBGrid, il est temps de voir comment utiliser la propriété PickList d'une colonne DGBrid pour permettre à un utilisateur de choisir une valeur pour un champ de recherche dans une zone de liste déroulante.

Une information rapide sur la propriété DBGrid Columns

UNE DBGrid Le contrôle a une propriété Columns - une collection d'objets TColumn représentant toutes les colonnes d'un contrôle de grille. Les colonnes peuvent être définies au moment de la conception via l'éditeur de colonnes ou par programme au moment de l'exécution. Vous ajouterez généralement Colonnes à un DBGird lorsque vous souhaitez définir la façon dont une colonne apparaît, comment les données de la colonne sont affichées et accéder aux propriétés, événements et méthodes de TDBGridColumns au moment de l'exécution. Une grille personnalisée vous permet de configurer plusieurs colonnes pour présenter différentes vues de la même ensemble de données (différents ordres de colonnes, différents choix de champs et différentes couleurs et polices de colonnes, pour exemple).

instagram viewer

Désormais, chaque colonne d'une grille est «liée» à un champ d'un ensemble de données affiché dans la grille. De plus, chaque colonne a une propriété PickList. La propriété PickList répertorie les valeurs que l'utilisateur peut sélectionner pour la valeur du champ lié de la colonne.

Remplir la PickList

Ce que vous apprendrez ici, c'est comment remplir cette liste de chaînes avec les valeurs d'un autre ensemble de données au moment de l'exécution.
Rappelons que nous éditons la table Articles et qu'un champ Subject ne peut accepter que les valeurs de la table Subjects: la situation idéale pour la PickList!

Voici comment configurer la propriété PickList. Tout d'abord, nous ajoutons un appel à la procédure SetupGridPickList dans le gestionnaire d'événement OnCreate du formulaire.

procédure TForm1.FormCreate (expéditeur: TObject);
commencer
SetupGridPickList ('Subject', 'SELECT Name FROM Subjects');
fin;

La façon la plus simple de créer la procédure SetupGridPickList consiste à accéder à la partie privée de la déclaration de formulaire, ajoutez-y la déclaration et appuyez sur la combinaison de touches CTRL + MAJ + C - l'achèvement du code de Delphi fera le du repos:

...
type
TForm1 = classe (TForm)
...
procédure privée SetupGridPickList (
const Nom de domaine: chaîne;
const sql: chaîne);
Publique
...

Remarque: la procédure SetupGridPickList prend deux paramètres. Le premier paramètre, FieldName, est le nom du champ que nous voulons agir comme un champ de recherche; le deuxième paramètre, SQL, est l'expression SQL que nous utilisons pour remplir la liste de sélection avec des valeurs possibles - en général, l'expression SQL doit renvoyer un ensemble de données avec un seul champ.

Voici à quoi ressemble le SetupGridPickList:

procédure TForm1.SetupGridPickList (const FieldName, sql: chaîne);
var
slPickList: TStringList;
Requête: TADOQuery;
i: entier;
commencer
slPickList: = TStringList. Créer;
Requête: = TADOQuery. Créer (soi);
essayer
Requete. Connexion: = ADOConnection1;
Requete. SQL.Text: = sql;
Requete. Ouvert;
// Remplit la liste des chaînestandis quene pas Requete. EOF dobegin
slPickList. Ajouter (Requête. Champs [0] .AsString);
Requete. Prochain;
fin; //while
// place la liste dans la bonne colonnepour i: = 0 à DBGrid1.Columns. Count-1 faire
si DBGrid1.Columns [i] .FieldName = FieldName puis commencer
DBGrid1.Columns [i] .PickList: = slPickList;
Pause;
fin;
enfin
slPickList. Gratuit;
Requete. Gratuit;
fin;
fin; (* SetupGridPickList *)

C'est ça. Maintenant, lorsque vous cliquez sur la colonne Objet (pour entrer en mode édition).

Remarque 1: par défaut, la liste déroulante affiche 7 valeurs. Vous pouvez modifier la longueur de cette liste en définissant la propriété DropDownRows.

Remarque 2: rien ne vous empêche de remplir la PickList à partir d'une liste de valeurs ne provenant pas d'une table de base de données. Si, par exemple, vous avez un champ qui n'accepte que les noms des jours de la semaine ('lundi',..., 'dimanche'), vous pouvez créer une liste de sélection "codée en dur".

"Euh, je dois cliquer 4 fois sur la PickList ..."

Notez que lorsque vous souhaitez modifier le champ affichant une liste déroulante, vous devrez cliquer 4 fois sur la cellule afin de sélectionner réellement une valeur dans une liste. L'extrait de code suivant, ajouté au gestionnaire d'événement OnCellClick de DBGrid, imite un hit sur la clé F2 suivi par Alt + DownArrow.

procédure TForm1.DBGrid1CellClick (colonne: TColumn);
commencer// Rendre la liste déroulante plus rapidesi Colonne. Liste de sélection. Nombre> 0 puis commencer
keybd_event (VK_F2,0,0,0);
keybd_event (VK_F2,0, KEYEVENTF_KEYUP, 0);
keybd_event (VK_MENU, 0,0,0);
keybd_event (VK_DOWN, 0,0,0);
keybd_event (VK_DOWN, 0, KEYEVENTF_KEYUP, 0);
keybd_event (VK_MENU, 0, KEYEVENTF_KEYUP, 0);
fin;
fin;