Comment placer une liste de sélection déroulante dans une 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 DBGrid de Delphi, 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 à partir d'une zone de liste déroulante.

Une information rapide sur la propriété DBGrid Columns

Un contrôle DBGrid 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 des colonnes à un DBGird lorsque vous souhaitez définir comment 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 du même ensemble de données (différents ordres de colonnes, différents choix de champs et différentes couleurs et polices de colonnes, par exemple).

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 est de savoir comment remplir cette liste de chaînes avec des 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énements 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 est d'accéder à la partie privée de la déclaration de formulaire, d'y ajouter la déclaration et d'appuyer sur la combinaison de touches CTRL + MAJ + C - l'achèvement du code Delphi fera le reste:


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.Create;
Requête: = TADOQuery.Create (self);
essayer
Query.Connection: = ADOConnection1;
Query.SQL.Text: = sql;
Query.Open;
// Remplit la liste des chaînestandis que ne pas Query.EOF dobegin
slPickList.Add (Query.Fields [0] .AsString);
Query.Next;
fin; //tandis que
// 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.Free;
Query.Free;
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 accès à la clé F2 suivi de Alt + DownArrow.

procédure TForm1.DBGrid1CellClick (colonne: TColumn);
commencer// Rendre la liste déroulante plus rapidesi Column.PickList.Count> 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;