Zde je návod, jak umístit rozevírací seznam do DBGrid. Vytvořte vizuálně atraktivnější uživatelská rozhraní pro úpravy vyhledávacích polí uvnitř DBGrid - pomocí vlastnosti PickList sloupce DBGrid.
Nyní, když víte, co jsou vyhledávací pole a jaké jsou možnosti zobrazení vyhledávacího pole v Delphi's DBGrid, je čas vidět, jak používat vlastnost PickList ve sloupci DGBrid, aby uživatel mohl vybrat hodnotu pro vyhledávací pole z rozevíracího seznamu.
Rychlá informace o vlastnosti sloupců DBGrid
A DBGrid control má vlastnost Columns - kolekce objektů TColumn představujících všechny sloupce v ovládacím prvku mřížky. Sloupce lze nastavit v době návrhu pomocí editoru sloupců nebo programově za běhu. Obvykle přidáte Sloupce do DBGird, pokud chcete definovat, jak se bude sloupec zobrazovat, jak se budou zobrazovat data ve sloupci, a přistupovat k vlastnostem, událostem a metodám TDBGridColumns za běhu. Přizpůsobená mřížka umožňuje nakonfigurovat více sloupců tak, aby zobrazovaly různé pohledy na stejné dataset (různé pořadí sloupců, různé volby polí a různé barvy sloupců a písma, pro příklad).
Nyní je každý sloupec v mřížce „propojen“ s polem z datové sady zobrazené v mřížce. Kromě toho má každý sloupec vlastnost PickList. Vlastnost PickList uvádí hodnoty, které může uživatel vybrat pro hodnotu propojeného pole ve sloupci.
Naplnění PickListu
Zde se dozvíte, jak vyplnit tento seznam řetězců hodnotami z jiného datového souboru v době spuštění.
Připomeňme, že upravujeme tabulku Články a že pole Předmět může přijímat pouze hodnoty z tabulky Předměty: ideální situace pro seznam PickList!
Zde je návod, jak nastavit vlastnost PickList. Nejprve přidáme volání procedury SetupGridPickList v obslužné rutině události OnCreate formuláře.
postup TForm1.FormCreate (Sender: TObject);
začít
SetupGridPickList ('Subject', 'SELECT Name FROM subjekty');
konec;
Nejjednodušší způsob, jak vytvořit proceduru SetupGridPickList, je přejít na soukromou část deklarace formuláře, přidejte tam deklaraci a stiskněte kombinaci kláves CTRL + SHIFT + C - doplnění kódu Delphi provede zbytek:
...
typ
TForm1 = třída (TForm)
...
soukromý postup SetupGridPickList (
konst Název pole: tětiva;
konst sql: tětiva);
veřejnost
...
Poznámka: Procedura SetupGridPickList trvá dva parametry. První parametr, FieldName, je název pole, které chceme chovat jako vyhledávací pole; druhý parametr, SQL, je výraz SQL, který používáme k naplnění PickListu možnými hodnotami - výraz SQL by obecně měl vrátit datovou sadu pouze s jedním polem.
Vypadá to, jak vypadá SetupGridPickList:
postup TForm1.SetupGridPickList (konst FieldName, sql: tětiva);
var
slPickList: TStringList;
Dotaz: TADOQuery;
i: celé číslo;
začít
slPickList: = TStringList. Vytvořit;
Dotaz: = TADOQuery. Vytvořit (vlastní);
Snaž se
Dotaz. Připojení: = ADOConnection1;
Dotaz. SQL.Text: = sql;
Dotaz. Otevřeno;
// Vyplňte seznam řetězcůzatímcone Dotaz. EOF dobegin
slPickList. Přidat (dotaz. Pole [0] .AsString);
Dotaz. Další;
konec; //while
// umístěte seznam do správného sloupcepro i: = 0 na DBGrid1.Columns. Počet-1 dělat
-li DBGrid1.Columns [i] .FieldName = FieldName thenbegin
DBGrid1.Columns [i] .PickList: = slPickList;
Přestávka;
konec;
Konečně
slPickList. Volný, uvolnit;
Dotaz. Volný, uvolnit;
konec;
konec; (* SetupGridPickList *)
A je to. Nyní, když kliknete na sloupec Předmět (pro vstup do režimu úprav).
Poznámka 1: ve výchozím nastavení se v rozevíracím seznamu zobrazí 7 hodnot. Délka tohoto seznamu můžete změnit nastavením vlastnosti DropDownRows.
Poznámka 2: nic vás nezabrání vyplnění seznamu PickList ze seznamu hodnot, které nepocházejí z databázové tabulky. Máte-li například pole, které přijímá pouze názvy dnů v týdnu ('pondělí',..., 'neděle'), můžete vytvořit "pevně zakódovaný" PickList.
"Uh, musím 4krát kliknout na PickList ..."
Pokud chcete upravit pole zobrazující rozevírací seznam, musíte kliknout na buňku čtyřikrát, abyste skutečně vybrali hodnotu ze seznamu. Další fragment kódu, přidaný do obsluhy události OnCellClick události DBGrid, napodobuje zásah do klávesy F2 následovaný Alt + DownArrow.
postup TForm1.DBGrid1CellClick (Sloupec: TColumn);
začít// Zrychlení rozevíracího seznamu-li Sloupec. PickList. Počet> 0 thenbegin
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);
konec;
konec;