Hur man väljer MultiSelect i Delphi DBGrid

Delphis DBGrid är en av de mest använda DB-medvetna komponenterna i databasrelaterade applikationer. Det huvudsakliga syftet är att göra det möjligt för din applikations användare att manipulera poster från en datasats i ett tabellnät.

En av de mindre kända funktionerna i DBGrid-komponenten är att den kan ställas in för att möjliggöra flera radval. Vad detta betyder är att dina användare kan ha möjlighet att välja flera poster (rader) från datasatsen ansluten till nätet.

Tillåter flera val

För att aktivera flera val behöver du bara ställa in dgMultiSelect element till "Sann" i alternativ fast egendom. När dgMultiSelect är "Sant", användare kan välja flera rader i ett rutnät med hjälp av följande tekniker:

  • Ctrl + musklick
  • Skift + piltangenter

De valda rader / poster representeras som bokmärken och lagras i rutnätet SelectedRows fast egendom.

Anteckna det SelectedRows är bara användbart när alternativ egenskapen är inställd på "Sann" för båda dgMultiSelect och dgRowSelect. Å andra sidan när du använder dgRowSelect (när enskilda celler inte kan väljas) kan användaren inte redigera poster direkt genom rutnätet och dgEditing är automatiskt inställt på "False."

De SelectedRows egendom är ett objekt av typen TBookmarkList. Vi kan använda SelectedRows egendom till exempel:

  • Få valt antal rader
  • Rensa markeringen (avmarkera)
  • Radera alla valda poster
  • Kontrollera om en viss post är vald

Att sätta dgMultiSelect till "Sant" kan du antingen använda Objektinspektör vid designtid eller använd ett kommando som detta vid körning:

DBGrid1.Options: = DBGrid1.Options + [dgMultiSelect];

dgMultiSelect Exempel

En bra situation att använda dgMultiSelect kan vara när du behöver ett alternativ för att välja slumpmässiga poster eller om du behöver summan av värdena för de valda fälten. 

Exemplet nedan använder ADO-komponenter (AdoQuery anslutet till ADOConnection och DBGrid ansluten till AdoQuery över Datakälla) för att visa poster från en databastabell i en DBGrid-komponent.

Koden använder flera val för att få summan av värdena i fältet "Storlek". Använd den här provkoden om du vill välja hela DBGrid:

procedur TForm1.btnDoSumClick (avsändare: TObject);
var
i: heltal;
summa: singel;
beginif DBGrid1.SelectedRows.Count> 0 thenbegin
summa: = 0;
med DBGrid1.DataSource.DataSet dobeginfor i: = 0 till DBGrid1.SelectedRows.Count-1 dobegin
GotoBookmark (Pointer (DBGrid1.SelectedRows.Items [i]));
summa: = summa + AdoQuery1.FieldByName ('Storlek'). AsFloat;
slutet;
slutet;
edSizeSum.Text: = FloatToStr (summan);
slutet
slutet;