[Delphi] Ordinare record in una DBGrid.
Oggi parliamo di come ordinare i record contenuti in una taballa di un database e visualizzati in una DBGrid; avviamo quindi un nuovo progetto Delphi, inseriamo i componenti per l’accesso al nostro database, possiamo utilizzare quelle a noi più familiani, esempio dbExpress, ADO, InterBase o altri ancora; per semplicità in questo esempio utilizzerò dei componenti ADO presenti nella palette dbGo di Delphi.
Dopo aver settato i relativi parametri dei su indicati componenti, inseriamo sulla form una DBGrid, selezioniamola, andiamo sull’Object Inspector e nella palette Events troviamo l’evento OnMouseMovie, facciamo doppio click ed inseriamo il seguente codice:
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
cursore: TGridcoord;
begin
cursore:= DBGrid1.MouseCoord(x, y);
if cursore.y=0 then
DBGrid1.Cursor:=crHandPoint
else
DBGrid1.Cursor:=crDefault;
end;
Tale codice provvede a far visualizzare il cursore di default se le coordinate Y sono diverse da zero altrimenti il cursore visualizzato sarà quello a forma di manina (appunto crHandPoint).
Il passo successivo è quello di inserire il codice per ordinare, in modo crescente o decrescente, i dati contenuti nella tabella in base all’intestazione della colonna cliccata, inoltre per tener traccia della colonna selezionata, faccio diventare il testo in grassetto, quindi ritorno nella sezione Events della DBGrid, cerco l’evento OnTitleClick, faccio doppio click e digito il seguente codice:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
{$J+}
const PreviousColumnIndex : integer = -1;
{$J-}
begin
if DBGrid1.DataSource.DataSet is TCustomADODataSet then
with TCustomADODataSet(DBGrid1.DataSource.DataSet) do
begin
try
DBGrid1.Columns[PreviousColumnIndex].title.Font.Style :=
DBGrid1.Columns[PreviousColumnIndex].title.Font.Style - [fsBold];
except
end;
Column.title.Font.Style :=
Column.title.Font.Style + [fsBold];
PreviousColumnIndex := Column.Index;
if (Pos(Column.Field.FieldName, Sort) = 1)
and (Pos(’ DESC’, Sort)= 0) then
Sort := Column.Field.FieldName + ‘ DESC’
else
Sort := Column.Field.FieldName + ‘ ASC’;
end;
end;
A questo punto non ci resta che compilare ed avviare l’applicazione, se avete fatto tutto correttamente, vedrete che andando con il cursore del mouse sulle singole intestazioni delle varie colonne, il puntatore cambierà forma, diventando una manina, se cliccate su un’intestazione qualsiasi, otterrete l’ordinamento dei dati contenuti nella tabella in base alla colonna cliccata ed in modo ascendente o discendente oltrechè cambierà anche lo stile del font relativo all’intestazione della colonna cliccata.